@yieldfabric/wallet 0.2.0 → 0.2.2

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/dist/index.js CHANGED
@@ -5345,7 +5345,7 @@ var init_SignupFlow = __esm({
5345
5345
  };
5346
5346
  AvererSidebar = ({ onError }) => {
5347
5347
  const navigate = useWalletNavigate();
5348
- return /* @__PURE__ */ jsxs("aside", { className: "w-full md:w-[360px] md:h-screen bg-background flex md:flex-col items-start justify-between md:justify-between gap-4 px-6 py-5 md:p-10 border-b md:border-b-0 md:border-r border-border-light/20", children: [
5348
+ return /* @__PURE__ */ jsxs("aside", { className: "w-full md:w-[360px] md:h-screen bg-background flex md:flex-col items-start justify-between md:justify-between gap-4 px-6 pt-[calc(1.25rem+env(safe-area-inset-top))] pb-5 md:p-10 border-b md:border-b-0 md:border-r border-border-light", children: [
5349
5349
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6 md:gap-10", children: [
5350
5350
  /* @__PURE__ */ jsx("div", { className: "text-text-primary", children: /* @__PURE__ */ jsx(YieldFabricLockup, { size: 32 }) }),
5351
5351
  /* @__PURE__ */ jsxs("div", { className: "hidden md:block space-y-3 max-w-[260px]", children: [
@@ -5954,7 +5954,7 @@ function clearDynamicSession() {
5954
5954
  init_WalletConfigContext();
5955
5955
  var WalletAuthContext = createContext(void 0);
5956
5956
  function WalletAuthProvider({ children }) {
5957
- const { onSessionBootstrapped } = useWalletConfig();
5957
+ const { onSessionBootstrapped, onBeforeLogout } = useWalletConfig();
5958
5958
  const [user, setUser] = useState(null);
5959
5959
  const [isLoading, setIsLoading] = useState(true);
5960
5960
  const [error, setError] = useState(null);
@@ -6047,6 +6047,7 @@ function WalletAuthProvider({ children }) {
6047
6047
  setIsLoading(true);
6048
6048
  setError(null);
6049
6049
  tokenRenewalService.stopRenewal();
6050
+ await Promise.resolve().then(() => onBeforeLogout?.()).catch(() => void 0);
6050
6051
  await authService.logout();
6051
6052
  clearDynamicSession();
6052
6053
  setUser(null);
@@ -6062,6 +6063,7 @@ function WalletAuthProvider({ children }) {
6062
6063
  setIsLoading(true);
6063
6064
  setError(null);
6064
6065
  tokenRenewalService.stopRenewal();
6066
+ await Promise.resolve().then(() => onBeforeLogout?.()).catch(() => void 0);
6065
6067
  await authService.logoutAll();
6066
6068
  clearDynamicSession();
6067
6069
  setUser(null);
@@ -8786,6 +8788,16 @@ var WalletCenterContext = createContext(null);
8786
8788
  function WalletCenterProvider({ children }) {
8787
8789
  const [isOpen, setIsOpen] = useState(false);
8788
8790
  const [requestedView, setRequestedView] = useState("menu");
8791
+ const [host, setHostElement] = useState(null);
8792
+ const [hostOptions, setHostOptions] = useState({});
8793
+ const [hostTitle, setHostTitle] = useState(null);
8794
+ const setHost = useCallback((next) => {
8795
+ setHostElement((current) => {
8796
+ if (current === next) return current;
8797
+ if (!next) setHostTitle(null);
8798
+ return next;
8799
+ });
8800
+ }, []);
8789
8801
  const openWalletCenter = useCallback((view = "menu") => {
8790
8802
  setRequestedView(view);
8791
8803
  setIsOpen(true);
@@ -8795,8 +8807,8 @@ function WalletCenterProvider({ children }) {
8795
8807
  setRequestedView("menu");
8796
8808
  }, []);
8797
8809
  const value = useMemo(
8798
- () => ({ isOpen, requestedView, openWalletCenter, closeWalletCenter }),
8799
- [isOpen, requestedView, openWalletCenter, closeWalletCenter]
8810
+ () => ({ isOpen, requestedView, openWalletCenter, closeWalletCenter, host, setHost, hostOptions, setHostOptions, hostTitle, setHostTitle }),
8811
+ [isOpen, requestedView, openWalletCenter, closeWalletCenter, host, setHost, hostOptions, hostTitle]
8800
8812
  );
8801
8813
  return /* @__PURE__ */ jsx(WalletCenterContext.Provider, { value, children });
8802
8814
  }
@@ -8824,53 +8836,105 @@ function RedirectTo({ href, replace = true }) {
8824
8836
  return null;
8825
8837
  }
8826
8838
 
8827
- // src/core/entityEvents.ts
8828
- init_tokenManager();
8829
- init_config();
8830
- function subscribeEntityEvents(entityId, onEvent, onError) {
8831
- let eventSource = null;
8832
- let reconnectTimeout = null;
8833
- let attempts = 0;
8839
+ // src/core/jsonEventStream.ts
8840
+ function subscribeJsonEvents(options) {
8834
8841
  let closed = false;
8835
- function connect() {
8842
+ let retry = 0;
8843
+ let timer;
8844
+ let controller;
8845
+ const connect = async () => {
8836
8846
  if (closed) return;
8837
- const token = tokenManager.getCurrentToken();
8838
- if (!token) {
8839
- onError?.(new Error("No auth token for entity event stream"));
8840
- reconnectTimeout = setTimeout(connect, 5e3);
8841
- return;
8842
- }
8843
- const baseUrl = getPaymentsServiceUrl();
8844
- const url = `${baseUrl}/api/events/stream?entity_id=${encodeURIComponent(entityId)}&access_token=${encodeURIComponent(token)}`;
8845
- eventSource = new EventSource(url);
8846
- eventSource.onmessage = (e) => {
8847
- try {
8848
- onEvent(JSON.parse(e.data));
8849
- } catch {
8850
- }
8851
- };
8852
- eventSource.onopen = () => {
8853
- attempts = 0;
8847
+ const attempt = new AbortController();
8848
+ controller = attempt;
8849
+ let reader;
8850
+ let stall;
8851
+ const renewDeadline = () => {
8852
+ if (stall) clearTimeout(stall);
8853
+ stall = setTimeout(() => attempt.abort(), 75e3);
8854
8854
  };
8855
- eventSource.onerror = () => {
8856
- eventSource?.close();
8857
- eventSource = null;
8858
- if (closed) return;
8859
- attempts++;
8860
- const delay2 = Math.min(1e3 * Math.pow(2, attempts - 1), 3e4);
8861
- reconnectTimeout = setTimeout(connect, delay2);
8862
- onError?.(new Error(`Entity SSE error, reconnecting in ${delay2}ms`));
8863
- };
8864
- }
8865
- connect();
8855
+ try {
8856
+ renewDeadline();
8857
+ const token = options.token();
8858
+ if (!token) throw new Error("Sign in to receive live updates.");
8859
+ const response = await fetch(options.url(), {
8860
+ headers: { Authorization: `Bearer ${token}`, Accept: "text/event-stream" },
8861
+ signal: attempt.signal,
8862
+ credentials: "omit",
8863
+ cache: "no-store",
8864
+ redirect: "error"
8865
+ });
8866
+ if (!response.ok || !response.headers.get("content-type")?.includes("text/event-stream") || !response.body) {
8867
+ throw new Error(`Live updates unavailable (HTTP ${response.status}).`);
8868
+ }
8869
+ reader = response.body.getReader();
8870
+ const decoder = new TextDecoder();
8871
+ let buffer = "", data = [], size = 0;
8872
+ while (!closed) {
8873
+ const part = await reader.read();
8874
+ if (part.done) break;
8875
+ renewDeadline();
8876
+ buffer += decoder.decode(part.value, { stream: true });
8877
+ for (; ; ) {
8878
+ const end = buffer.search(/[\r\n]/);
8879
+ if (end < 0 || buffer[end] === "\r" && end === buffer.length - 1) break;
8880
+ const line = buffer.slice(0, end);
8881
+ const delimiter = buffer[end] === "\r" && buffer[end + 1] === "\n" ? 2 : 1;
8882
+ buffer = buffer.slice(end + delimiter);
8883
+ size += line.length;
8884
+ if (size > 262144) throw new Error("Live update exceeded its size limit.");
8885
+ if (!line) {
8886
+ if (data.length) {
8887
+ let value;
8888
+ try {
8889
+ value = JSON.parse(data.join("\n"));
8890
+ } catch {
8891
+ }
8892
+ if (value !== void 0 && !closed) {
8893
+ retry = 0;
8894
+ options.onEvent(value);
8895
+ }
8896
+ }
8897
+ data = [];
8898
+ size = 0;
8899
+ } else if (line.startsWith("data:")) {
8900
+ data.push(line.slice(5).replace(/^ /, ""));
8901
+ }
8902
+ }
8903
+ if (buffer.length + size > 262144) throw new Error("Live update exceeded its size limit.");
8904
+ }
8905
+ if (!closed) throw new Error("Live updates disconnected.");
8906
+ } catch (error) {
8907
+ if (!closed) options.onError?.(error instanceof Error ? error : new Error("Live updates unavailable."));
8908
+ } finally {
8909
+ if (stall) clearTimeout(stall);
8910
+ attempt.abort();
8911
+ if (reader) {
8912
+ void reader.cancel().catch(() => void 0);
8913
+ reader.releaseLock();
8914
+ }
8915
+ if (!closed) timer = setTimeout(() => void connect(), Math.min(1e3 * 2 ** Math.min(retry++, 5), 3e4));
8916
+ }
8917
+ };
8918
+ void connect();
8866
8919
  return () => {
8867
8920
  closed = true;
8868
- eventSource?.close();
8869
- eventSource = null;
8870
- if (reconnectTimeout) clearTimeout(reconnectTimeout);
8921
+ if (timer) clearTimeout(timer);
8922
+ controller?.abort();
8871
8923
  };
8872
8924
  }
8873
8925
 
8926
+ // src/core/entityEvents.ts
8927
+ init_tokenManager();
8928
+ init_config();
8929
+ function subscribeEntityEvents(entityId, onEvent, onError) {
8930
+ return subscribeJsonEvents({
8931
+ url: () => `${getPaymentsServiceUrl()}/api/events/stream?entity_id=${encodeURIComponent(entityId)}`,
8932
+ token: () => tokenManager.getCurrentToken(),
8933
+ onEvent,
8934
+ onError
8935
+ });
8936
+ }
8937
+
8874
8938
  // src/core/globalNotificationService.ts
8875
8939
  var _GlobalNotificationService = class _GlobalNotificationService {
8876
8940
  constructor(callbacks) {
@@ -9247,11 +9311,11 @@ function humanizeMessageType(messageType) {
9247
9311
  return spaced.charAt(0).toUpperCase() + spaced.slice(1);
9248
9312
  }
9249
9313
  var TONE_COLORS = {
9250
- success: { dotClass: "bg-emerald-300", textClass: "text-emerald-300", bgClass: "bg-emerald-950/[0.16]" },
9251
- danger: { dotClass: "bg-red-300", textClass: "text-red-200", bgClass: "bg-red-950/[0.16]" },
9252
- warn: { dotClass: "bg-amber-300", textClass: "text-amber-200", bgClass: "bg-amber-950/[0.14]" },
9253
- info: { dotClass: "bg-blue-300", textClass: "text-blue-200", bgClass: "bg-blue-950/[0.14]" },
9254
- neutral: { dotClass: "bg-white/[0.34]", textClass: "text-white/[0.56]", bgClass: "bg-white/[0.045]" }
9314
+ success: { dotClass: "bg-emerald-300", textClass: "text-status-success-text dark:text-emerald-300", bgClass: "bg-status-success-bg dark:bg-emerald-950/[0.16]" },
9315
+ danger: { dotClass: "bg-red-300", textClass: "text-status-error-text dark:text-red-200", bgClass: "bg-status-error-bg dark:bg-red-950/[0.16]" },
9316
+ warn: { dotClass: "bg-amber-300", textClass: "text-status-warning-text dark:text-amber-200", bgClass: "bg-status-warning-bg dark:bg-amber-950/[0.14]" },
9317
+ info: { dotClass: "bg-blue-300", textClass: "text-azure dark:text-blue-200", bgClass: "bg-azure-tint dark:bg-blue-950/[0.14]" },
9318
+ neutral: { dotClass: "bg-text-muted dark:bg-white/[0.34]", textClass: "text-text-muted dark:text-white/[0.56]", bgClass: "bg-chip dark:bg-white/[0.045]" }
9255
9319
  };
9256
9320
  var STATUS_TO_TONE = {
9257
9321
  completed: "success",
@@ -9382,7 +9446,7 @@ function CenterPrimaryButton({
9382
9446
  size = "sm",
9383
9447
  className = ""
9384
9448
  }) {
9385
- const sizeClasses2 = size === "md" ? "text-[12px] px-3 py-1.5" : "text-[11px] px-2.5 py-1";
9449
+ const sizeClasses2 = size === "md" ? "text-[12px] px-3 py-1.5 max-lg:min-h-[44px] max-lg:px-4 max-lg:text-[13px]" : "text-[11px] px-2.5 py-1 max-lg:min-h-[44px] max-lg:px-4 max-lg:text-[13px]";
9386
9450
  return /* @__PURE__ */ jsx(
9387
9451
  "button",
9388
9452
  {
@@ -9391,7 +9455,7 @@ function CenterPrimaryButton({
9391
9455
  onClick,
9392
9456
  className: [
9393
9457
  "font-medium rounded-md transition-colors",
9394
- "bg-cta text-on-cta hover:bg-cta-hover",
9458
+ "bg-cta text-on-cta hover:bg-cta-hover active:opacity-90",
9395
9459
  "disabled:opacity-50 disabled:cursor-not-allowed",
9396
9460
  sizeClasses2,
9397
9461
  className
@@ -10315,7 +10379,7 @@ function LoginPage({
10315
10379
  align = "center",
10316
10380
  logo
10317
10381
  }) {
10318
- const alignClass = align === "top" ? "items-start pt-12 pb-12" : "items-center";
10382
+ const alignClass = align === "top" ? "items-start pt-[calc(3rem+env(safe-area-inset-top))] pb-12" : "items-center pt-[env(safe-area-inset-top)]";
10319
10383
  return /* @__PURE__ */ jsx(
10320
10384
  "div",
10321
10385
  {
@@ -10454,7 +10518,7 @@ function OnboardingChoosePath({ chrome } = {}) {
10454
10518
  /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-[520px] text-center space-y-1.5", children: [
10455
10519
  /* @__PURE__ */ jsx("h2", { className: "text-[18px] text-text-primary font-medium", children: messages.choosePath.header }),
10456
10520
  /* @__PURE__ */ jsx("p", { className: "text-[12px] text-text-secondary", children: messages.choosePath.subheader }),
10457
- configError && /* @__PURE__ */ jsx("p", { className: "text-[10px] text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
10521
+ configError && /* @__PURE__ */ jsx("p", { className: "text-[10px] text-status-warning-text dark:text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
10458
10522
  ] }),
10459
10523
  /* @__PURE__ */ jsxs("div", { className: "mx-auto w-full max-w-[480px] space-y-2.5", children: [
10460
10524
  avererEnabled && /* @__PURE__ */ jsx(
@@ -11452,7 +11516,7 @@ function StripeProgressPanel({
11452
11516
  detail ? /* @__PURE__ */ jsx("p", { className: "mt-2 text-[10px] leading-relaxed text-text-secondary/75", children: detail }) : null
11453
11517
  ] })
11454
11518
  ] }),
11455
- /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-border-default/40", children: /* @__PURE__ */ jsx("div", { className: `h-full w-2/3 rounded-full ${delayed ? "bg-status-warning-text" : "bg-cta"} motion-safe:animate-pulse` }) })
11519
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-border-default", children: /* @__PURE__ */ jsx("div", { className: `h-full w-2/3 rounded-full ${delayed ? "bg-status-warning-text" : "bg-cta"} motion-safe:animate-pulse` }) })
11456
11520
  ] });
11457
11521
  }
11458
11522
  function StripeResultPanel({
@@ -11858,7 +11922,7 @@ function ProgressPanel({
11858
11922
  /* @__PURE__ */ jsx("h1", { className: "text-[16px] font-medium text-text-primary leading-snug", children: title }),
11859
11923
  /* @__PURE__ */ jsx("p", { className: "mt-1 text-[12px] leading-relaxed text-text-secondary", children: body })
11860
11924
  ] }),
11861
- /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-border-default/40", children: /* @__PURE__ */ jsx(
11925
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-border-default", children: /* @__PURE__ */ jsx(
11862
11926
  "div",
11863
11927
  {
11864
11928
  className: `h-full w-2/3 rounded-full motion-safe:animate-pulse ${delayed ? "bg-status-warning-text" : "bg-cta"}`
@@ -12203,7 +12267,7 @@ function OnboardingChooseMethod({ chrome } = {}) {
12203
12267
  return /* @__PURE__ */ jsx(StepShell, { chrome, children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
12204
12268
  /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
12205
12269
  /* @__PURE__ */ jsx("h2", { className: "text-[16px] text-text-primary", children: messages.chooseMethod.header }),
12206
- configError && /* @__PURE__ */ jsx("p", { className: "text-[10px] text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
12270
+ configError && /* @__PURE__ */ jsx("p", { className: "text-[10px] text-status-warning-text dark:text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
12207
12271
  ] }),
12208
12272
  /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
12209
12273
  enabled.map(({ id, impl }) => {
@@ -12996,7 +13060,7 @@ function SkeletonAvatar({
12996
13060
  {
12997
13061
  role: "img",
12998
13062
  "aria-label": choice ? `${name} - ${choice.label} avatar` : `${name}'s avatar`,
12999
- className: `rounded-full overflow-hidden flex items-center justify-center select-none bg-[#252525] ${className}`,
13063
+ className: `rounded-full overflow-hidden flex items-center justify-center select-none bg-surface-alt dark:bg-[#252525] ${className}`,
13000
13064
  style: {
13001
13065
  width: size,
13002
13066
  height: size
@@ -13049,7 +13113,7 @@ function AvatarPicker({
13049
13113
  onClick: () => onChange(c.id),
13050
13114
  className: [
13051
13115
  "rounded-full flex items-center justify-center select-none overflow-hidden",
13052
- "transition-all border-2 bg-[#252525]",
13116
+ "transition-all border-2 bg-surface-alt dark:bg-[#252525]",
13053
13117
  selected ? "border-primary scale-105" : "border-transparent hover:border-border-light"
13054
13118
  ].join(" "),
13055
13119
  style: { width: tileSize, height: tileSize },
@@ -14927,7 +14991,7 @@ function RecoveryPanel({
14927
14991
  return /* @__PURE__ */ jsx(
14928
14992
  "div",
14929
14993
  {
14930
- className: "rounded-lg border border-status-warning-text/25 bg-status-warning-bg/80 px-3.5 py-3 text-status-warning-text",
14994
+ className: "rounded-lg border border-status-warning-text/25 bg-status-warning-bg px-3.5 py-3 text-status-warning-text",
14931
14995
  role: "alert",
14932
14996
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
14933
14997
  /* @__PURE__ */ jsx("div", { className: `mt-0.5 h-8 w-8 shrink-0 rounded-full flex items-center justify-center ${iconClass}`, children: /* @__PURE__ */ jsx(ExclamationTriangleIcon, { className: "h-4 w-4", strokeWidth: 1.8 }) }),
@@ -15368,7 +15432,7 @@ function AddWalletsStep({ chrome } = {}) {
15368
15432
  showDynamic && /* @__PURE__ */ jsx(
15369
15433
  "div",
15370
15434
  {
15371
- className: "fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-4",
15435
+ className: "fixed inset-0 z-[10000] flex items-center justify-center bg-black/70 p-4",
15372
15436
  role: "dialog",
15373
15437
  "aria-modal": "true",
15374
15438
  children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md rounded-lg border border-border-default bg-surface p-4", children: [
@@ -15448,6 +15512,8 @@ var Drawer = ({
15448
15512
  useEffect(() => {
15449
15513
  if (!isOpen || typeof document === "undefined") return;
15450
15514
  const previouslyFocused = document.activeElement;
15515
+ const bodyOverflow = document.body.style.overflow;
15516
+ document.body.style.overflow = "hidden";
15451
15517
  const initialFocus = panelRef.current?.querySelector("[data-drawer-initial-focus]") ?? closeButtonRef.current;
15452
15518
  initialFocus?.focus();
15453
15519
  const handleKeyDown = (event) => {
@@ -15478,11 +15544,16 @@ var Drawer = ({
15478
15544
  document.addEventListener("keydown", handleKeyDown);
15479
15545
  return () => {
15480
15546
  document.removeEventListener("keydown", handleKeyDown);
15547
+ document.body.style.overflow = bodyOverflow;
15481
15548
  previouslyFocused?.focus?.();
15482
15549
  };
15483
15550
  }, [isOpen, onClose]);
15484
- const widthClass = maxWidth === "sm" ? "w-full max-w-sm" : maxWidth === "md" ? "w-full max-w-md" : maxWidth === "lg" ? "w-full max-w-2xl" : maxWidth === "half" ? "w-1/2" : maxWidth === "full-mobile" ? "w-full xl:w-1/2" : maxWidth === "full" ? "w-full" : "w-full max-w-md";
15485
- const widthStyle = maxWidth === "lg" ? { width: "672px", maxWidth: "672px" } : maxWidth === "half" ? { width: "50vw", maxWidth: "50vw" } : maxWidth === "full-mobile" ? {} : {};
15551
+ const widthClass = maxWidth === "sm" ? "w-full max-w-sm" : maxWidth === "md" ? "w-full max-w-md" : maxWidth === "lg" ? "w-full max-w-2xl" : maxWidth === "half" ? "w-full lg:w-1/2" : maxWidth === "full-mobile" ? "w-full xl:w-1/2" : maxWidth === "full" ? "w-full" : "w-full max-w-md";
15552
+ const widthStyle = maxWidth === "lg" ? { width: "672px", maxWidth: "672px" } : (
15553
+ // 'half' is a desk shape; a hard 50vw made it 187px on a phone. The
15554
+ // class carries the split now, so there is no inline width to fight.
15555
+ maxWidth === "half" ? {} : maxWidth === "full-mobile" ? {} : {}
15556
+ );
15486
15557
  return /* @__PURE__ */ jsx(Fragment, { children: isOpen && /* @__PURE__ */ jsx("div", { className: "fixed inset-0 overflow-hidden z-[10000]", children: /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 overflow-hidden", children: [
15487
15558
  /* @__PURE__ */ jsx(
15488
15559
  "div",
@@ -15498,7 +15569,7 @@ var Drawer = ({
15498
15569
  role: "dialog",
15499
15570
  "aria-modal": "true",
15500
15571
  "aria-labelledby": titleId,
15501
- className: `pointer-events-auto ${panelBg} shadow-2xl h-full flex flex-col ${widthClass} ${panelClassName}`,
15572
+ className: `pointer-events-auto ${panelBg} shadow-2xl h-full flex flex-col pt-[env(safe-area-inset-top)] ${widthClass} ${panelClassName}`,
15502
15573
  style: { ...widthStyle, ...panelStyle },
15503
15574
  onClick: (e) => e.stopPropagation(),
15504
15575
  children: [
@@ -15519,12 +15590,12 @@ var Drawer = ({
15519
15590
  /* @__PURE__ */ jsx(
15520
15591
  "div",
15521
15592
  {
15522
- className: `flex-1 px-3 pt-2 ${panelBg} ${fillHeight ? "flex flex-col overflow-hidden pb-0" : "overflow-y-auto pb-6"} ${contentClassName}`,
15593
+ className: `flex-1 px-3 pt-2 ${panelBg} ${fillHeight ? "flex flex-col overflow-hidden pb-0" : "overflow-y-auto pb-[max(1.5rem,env(safe-area-inset-bottom))]"} ${contentClassName}`,
15523
15594
  style: contentStyle,
15524
15595
  children
15525
15596
  }
15526
15597
  ),
15527
- footer && /* @__PURE__ */ jsx("div", { className: `px-6 py-4 border-t border-border-default ${panelBg} flex-shrink-0 ${footerClassName}`, children: footer })
15598
+ footer && /* @__PURE__ */ jsx("div", { className: `flex-shrink-0 border-t border-border-default px-6 py-4 pb-[max(1rem,env(safe-area-inset-bottom))] ${panelBg} ${footerClassName}`, children: footer })
15528
15599
  ]
15529
15600
  }
15530
15601
  ) })
@@ -16131,7 +16202,7 @@ var AccountOpeningPanel = ({ onContinue, continueLabel = "Continue" }) => {
16131
16202
  /* @__PURE__ */ jsx("h1", { className: "text-[16px] font-medium text-text-primary leading-snug", children: copy.title }),
16132
16203
  /* @__PURE__ */ jsx("p", { className: "mt-1 text-[12px] leading-relaxed text-text-secondary", children: showExit && !terminalFailure ? "This is taking longer than usual. We'll let you know as soon as it's ready \u2014 you can carry on in the meantime." : copy.body })
16133
16204
  ] }),
16134
- terminalFailure ? null : /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-border-default/40", children: /* @__PURE__ */ jsx(
16205
+ terminalFailure ? null : /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-border-default", children: /* @__PURE__ */ jsx(
16135
16206
  "div",
16136
16207
  {
16137
16208
  className: `h-full w-2/3 rounded-full motion-safe:animate-pulse ${impatient ? "bg-status-warning-text" : "bg-cta"}`
@@ -17909,7 +17980,7 @@ var OnboardingPolicySection = ({
17909
17980
  ]);
17910
17981
  if (hidden || loading || deployLoading || platformActive === null) return null;
17911
17982
  if (platformActive === "error") {
17912
- return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4", children: [
17983
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4", children: [
17913
17984
  /* @__PURE__ */ jsx("div", { className: "mb-3", children: /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Platform onboarding" }) }),
17914
17985
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 rounded-lg border border-border-light bg-surface-alt px-3 py-2.5 text-[13px] leading-5 text-text-muted", children: [
17915
17986
  /* @__PURE__ */ jsx("span", { children: "Couldn't confirm whether this group is used as a platform." }),
@@ -17926,12 +17997,12 @@ var OnboardingPolicySection = ({
17926
17997
  ] });
17927
17998
  }
17928
17999
  if (!platformActive) {
17929
- return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4", children: [
18000
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4", children: [
17930
18001
  /* @__PURE__ */ jsx("div", { className: "mb-3", children: /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Platform onboarding" }) }),
17931
18002
  /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border-light bg-surface-alt px-3 py-2.5 text-[13px] leading-5 text-text-muted", children: "This group isn't used as a platform, so there are no signups to configure. Enable platform sponsorship first \u2014 then choose the sign-in methods and identity checks its users go through." })
17932
18003
  ] });
17933
18004
  }
17934
- return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4", children: [
18005
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4", children: [
17935
18006
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
17936
18007
  /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Platform onboarding" }),
17937
18008
  /* @__PURE__ */ jsx("p", { className: "text-xs text-text-muted", children: "The path people take from first visit to transacting on this platform." })
@@ -18716,7 +18787,7 @@ function DecodedCalldata({
18716
18787
  }
18717
18788
  const kindColor = {
18718
18789
  zero: "text-text-muted",
18719
- address: "text-blue-300/[0.90]",
18790
+ address: "text-azure dark:text-blue-300/[0.90]",
18720
18791
  uint: "text-text-primary",
18721
18792
  bytes32: "text-text-secondary"
18722
18793
  };
@@ -19707,14 +19778,14 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19707
19778
  type: "button",
19708
19779
  onClick: handleCancelMessage,
19709
19780
  disabled: cancelling,
19710
- className: "px-3 py-2 text-[13px] text-red-200 hover:text-text-primary disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
19781
+ className: "px-3 py-2 text-[13px] text-status-error-text dark:text-red-200 hover:text-text-primary disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
19711
19782
  children: cancelling ? "Cancelling\u2026" : "Cancel message"
19712
19783
  }
19713
19784
  ) : void 0,
19714
19785
  children: [
19715
- /* @__PURE__ */ jsx("p", { className: "text-[13px] font-medium text-red-100 mb-1", children: "Couldn't load transaction" }),
19786
+ /* @__PURE__ */ jsx("p", { className: "text-[13px] font-medium text-status-error-text dark:text-red-100 mb-1", children: "Couldn't load transaction" }),
19716
19787
  /* @__PURE__ */ jsx("p", { className: "text-[12px] text-text-secondary max-w-sm", children: error }),
19717
- cancelError && /* @__PURE__ */ jsx("p", { className: "text-[12px] text-red-200 mt-3", children: cancelError })
19788
+ cancelError && /* @__PURE__ */ jsx("p", { className: "text-[12px] text-status-error-text dark:text-red-200 mt-3", children: cancelError })
19718
19789
  ]
19719
19790
  }
19720
19791
  );
@@ -19729,7 +19800,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19729
19800
  })();
19730
19801
  return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col h-full text-text-primary", children: [
19731
19802
  /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden", children: /* @__PURE__ */ jsxs("div", { className: "space-y-3 px-4 py-4", children: [
19732
- reviewWarning && /* @__PURE__ */ jsx("p", { className: "rounded-lg border border-amber-300/[0.22] bg-amber-400/[0.08] px-3 py-2 text-[12px] leading-5 text-amber-100", children: reviewWarning }),
19803
+ reviewWarning && /* @__PURE__ */ jsx("p", { className: "rounded-lg border border-status-warning-line dark:border-amber-300/[0.22] bg-status-warning-bg dark:bg-amber-400/[0.08] px-3 py-2 text-[12px] leading-5 text-status-warning-text dark:text-amber-100", children: reviewWarning }),
19733
19804
  /* @__PURE__ */ jsx("p", { className: "text-[12px] text-text-secondary leading-5", children: mode === "inspect" ? "Review action details and execution outcome." : "Review the action, choose a signing key, and confirm." }),
19734
19805
  /* @__PURE__ */ jsx("div", { className: "flex w-full rounded-[22px] border border-border-light bg-raised p-1 text-[12px] shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: ["simple", "advanced"].map((mode2) => /* @__PURE__ */ jsx(
19735
19806
  "button",
@@ -19918,7 +19989,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19918
19989
  ] })
19919
19990
  }
19920
19991
  ),
19921
- selector && !methodName && /* @__PURE__ */ jsx("p", { className: "rounded-lg border border-red-300/[0.18] bg-red-400/[0.08] px-2.5 py-2 text-[10px] leading-4 text-red-200", children: "High risk: this selector is unknown. Review the raw target, value, and every calldata word before signing." }),
19992
+ selector && !methodName && /* @__PURE__ */ jsx("p", { className: "rounded-lg border border-status-error-line dark:border-red-300/[0.18] bg-status-error-bg dark:bg-red-400/[0.08] px-2.5 py-2 text-[10px] leading-4 text-status-error-text dark:text-red-200", children: "High risk: this selector is unknown. Review the raw target, value, and every calldata word before signing." }),
19922
19993
  !dataEmpty && /* @__PURE__ */ jsx("div", { className: "text-[12px]", children: isExpanded ? /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
19923
19994
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
19924
19995
  /* @__PURE__ */ jsx("span", { className: "text-text-muted", children: "Calldata" }),
@@ -19977,7 +20048,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19977
20048
  ] })
19978
20049
  ] }) }),
19979
20050
  mode === "sign" && /* @__PURE__ */ jsxs("div", { className: "flex-shrink-0 border-t border-border-light bg-surface-alt", children: [
19980
- keysLoading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-5", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-border-strong border-t-transparent" }) }) : keysError ? /* @__PURE__ */ jsx("p", { className: "text-[12px] text-red-200 px-4 py-3", children: keysError }) : availableKeys.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-[12px] text-text-muted text-center py-5", children: ownedSignerState.error ?? (ownedSignerBinding ? "The personal key bound to this owned-group session is unavailable. Return to the parent group and mint a new session with an active key." : `No active keys for this ${entityType}.`) }) : /* @__PURE__ */ jsxs("div", { className: "px-4 pt-3 pb-1 space-y-2", children: [
20051
+ keysLoading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-5", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-border-strong border-t-transparent" }) }) : keysError ? /* @__PURE__ */ jsx("p", { className: "text-[12px] text-status-error-text dark:text-red-200 px-4 py-3", children: keysError }) : availableKeys.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-[12px] text-text-muted text-center py-5", children: ownedSignerState.error ?? (ownedSignerBinding ? "The personal key bound to this owned-group session is unavailable. Return to the parent group and mint a new session with an active key." : `No active keys for this ${entityType}.`) }) : /* @__PURE__ */ jsxs("div", { className: "px-4 pt-3 pb-1 space-y-2", children: [
19981
20052
  /* @__PURE__ */ jsx(SectionLabel, { children: "Sign with" }),
19982
20053
  /* @__PURE__ */ jsx("ul", { className: "max-h-40 overflow-y-auto divide-y divide-border-light", children: availableKeys.map((key) => {
19983
20054
  const isSelected = selectedKey?.id === key.id;
@@ -20022,7 +20093,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
20022
20093
  walletLabel(walletKindFromKey(selectedKey)),
20023
20094
  " will open to sign."
20024
20095
  ] }),
20025
- ownedSignerBinding && /* @__PURE__ */ jsxs("p", { className: "text-[11px] text-cyan-200", children: [
20096
+ ownedSignerBinding && /* @__PURE__ */ jsxs("p", { className: "text-[11px] text-azure dark:text-cyan-200", children: [
20026
20097
  "This owned-group request is cryptographically bound to this personal key (",
20027
20098
  ownedSignerBinding.signerCustody,
20028
20099
  "). Choose a different key by returning to the parent group and minting a new child session."
@@ -20098,8 +20169,8 @@ function InspectFooter({
20098
20169
  }
20099
20170
  };
20100
20171
  return /* @__PURE__ */ jsxs("div", { className: "flex-shrink-0 border-t border-border-light bg-raised px-3 py-3 space-y-2.5", children: [
20101
- awaitingSignature && onSwitchToSign && /* @__PURE__ */ jsxs("div", { className: "rounded-[18px] border border-amber-300/[0.20] bg-amber-950/[0.12] px-3 py-2 flex items-center justify-between gap-3", children: [
20102
- /* @__PURE__ */ jsx("p", { className: "text-[12px] text-amber-100/[0.82]", children: "This message is now awaiting your signature." }),
20172
+ awaitingSignature && onSwitchToSign && /* @__PURE__ */ jsxs("div", { className: "rounded-[18px] border border-status-warning-line dark:border-amber-300/[0.20] bg-status-warning-bg dark:bg-amber-950/[0.12] px-3 py-2 flex items-center justify-between gap-3", children: [
20173
+ /* @__PURE__ */ jsx("p", { className: "text-[12px] text-status-warning-text dark:text-amber-100/[0.82]", children: "This message is now awaiting your signature." }),
20103
20174
  /* @__PURE__ */ jsx(
20104
20175
  "button",
20105
20176
  {
@@ -20128,7 +20199,7 @@ function InspectFooter({
20128
20199
  href: txExplorerUrl,
20129
20200
  target: "_blank",
20130
20201
  rel: "noopener noreferrer",
20131
- className: "text-blue-300/[0.90] hover:text-blue-200 hover:underline underline-offset-2 transition-colors",
20202
+ className: "text-azure dark:text-blue-300/[0.90] hover:text-azure-deep dark:hover:text-blue-200 hover:underline underline-offset-2 transition-colors",
20132
20203
  children: [
20133
20204
  formatTxHashShort(txHash),
20134
20205
  /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "ml-0.5 text-[9px] align-middle opacity-70", children: "\u2197" })
@@ -20154,7 +20225,7 @@ Opens in block explorer` : txHash
20154
20225
  ] }),
20155
20226
  message.response?.error && /* @__PURE__ */ jsxs("div", { children: [
20156
20227
  /* @__PURE__ */ jsx("p", { className: "text-[10px] font-medium uppercase tracking-[0.13em] text-text-muted mb-0.5", children: "Error" }),
20157
- /* @__PURE__ */ jsx("p", { className: "text-[12px] text-red-200 break-words", children: message.response.error })
20228
+ /* @__PURE__ */ jsx("p", { className: "text-[12px] text-status-error-text dark:text-red-200 break-words", children: message.response.error })
20158
20229
  ] }),
20159
20230
  reexecutions.length > 0 && /* @__PURE__ */ jsxs("details", { children: [
20160
20231
  /* @__PURE__ */ jsxs("summary", { className: "text-[11px] uppercase tracking-[0.12em] text-text-muted cursor-pointer hover:text-text-primary transition-colors", children: [
@@ -20168,7 +20239,7 @@ Opens in block explorer` : txHash
20168
20239
  className: "text-[11px] rounded-[10px] border border-border-light px-2 py-1 bg-surface-alt",
20169
20240
  children: [
20170
20241
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
20171
- /* @__PURE__ */ jsx("span", { className: r.success ? "text-emerald-300/[0.90]" : "text-red-200", children: r.success ? "Succeeded" : "Failed" }),
20242
+ /* @__PURE__ */ jsx("span", { className: r.success ? "text-status-success-text dark:text-emerald-300/[0.90]" : "text-status-error-text dark:text-red-200", children: r.success ? "Succeeded" : "Failed" }),
20172
20243
  /* @__PURE__ */ jsx("span", { className: "text-text-muted", children: formatRelativeTime(r.attempted_at) })
20173
20244
  ] }),
20174
20245
  r.error && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-text-secondary break-words", children: r.error })
@@ -20178,7 +20249,7 @@ Opens in block explorer` : txHash
20178
20249
  )) })
20179
20250
  ] })
20180
20251
  ] }),
20181
- actionError && /* @__PURE__ */ jsx("div", { className: "rounded-[16px] border border-red-300/[0.24] bg-red-950/[0.18] px-3 py-2 text-[11px] text-red-100", children: actionError }),
20252
+ actionError && /* @__PURE__ */ jsx("div", { className: "rounded-[16px] border border-status-error-line dark:border-red-300/[0.24] bg-status-error-bg dark:bg-red-950/[0.18] px-3 py-2 text-[11px] text-status-error-text dark:text-red-100", children: actionError }),
20182
20253
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2", children: [
20183
20254
  /* @__PURE__ */ jsx(
20184
20255
  "button",
@@ -20514,14 +20585,14 @@ function SignatureWorkflow({
20514
20585
  {
20515
20586
  id: `signature-${pending.id}`,
20516
20587
  type: "action",
20517
- title: "Signature Required",
20518
- message: "A queued action is waiting for your signature.",
20588
+ title: "Signature needed",
20589
+ message: "Something is waiting for your signature.",
20519
20590
  duration: 0,
20520
20591
  showProgress: false,
20521
20592
  onClose: dismissPending,
20522
20593
  onClick: () => openSigner(pending),
20523
20594
  action: {
20524
- label: "Review & Sign",
20595
+ label: "Review and sign",
20525
20596
  onClick: () => openSigner(pending)
20526
20597
  }
20527
20598
  }
@@ -20531,7 +20602,7 @@ function SignatureWorkflow({
20531
20602
  {
20532
20603
  isOpen: true,
20533
20604
  onClose: closeSigner,
20534
- title: currentMessage.data?.message_type ? `${currentMessage.data.message_type} \u2014 Sign` : "Sign Transaction",
20605
+ title: currentMessage.data?.message_type ? `${humanizeMessageType(currentMessage.data.message_type)} \u2014 Sign` : "Sign this request",
20535
20606
  maxWidth: "lg",
20536
20607
  fillHeight: true,
20537
20608
  children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-full", children: [
@@ -20561,8 +20632,10 @@ function SignatureWorkflow({
20561
20632
  ] });
20562
20633
  }
20563
20634
  var PLACEMENT_CLASSES = {
20564
- "top-left": "top-4 left-4",
20565
- "top-right": "top-4 right-4",
20635
+ // The top corners clear the status bar of a home-screen install (zero
20636
+ // in a browser tab).
20637
+ "top-left": "top-[calc(1rem+env(safe-area-inset-top))] left-4",
20638
+ "top-right": "top-[calc(1rem+env(safe-area-inset-top))] right-4",
20566
20639
  "bottom-left": "bottom-4 left-4",
20567
20640
  "bottom-right": "bottom-4 right-4"
20568
20641
  };
@@ -22160,10 +22233,10 @@ function SecurityPage() {
22160
22233
  const [generateDescription, setGenerateDescription] = useState("");
22161
22234
  const [freshApiKey, setFreshApiKey] = useState(null);
22162
22235
  const [freshApiKeyCopied, setFreshApiKeyCopied] = useState(false);
22163
- const refresh = useCallback(async () => {
22236
+ const refresh = useCallback(async (opts) => {
22164
22237
  setError(null);
22165
22238
  try {
22166
- invalidateWalletCount();
22239
+ if (opts?.invalidate !== false) invalidateWalletCount();
22167
22240
  const [k, l] = await Promise.all([
22168
22241
  listMyLoginKeys(),
22169
22242
  keysService.getLockdownStatus().catch(() => null)
@@ -22177,7 +22250,7 @@ function SecurityPage() {
22177
22250
  }
22178
22251
  }, []);
22179
22252
  useEffect(() => {
22180
- refresh();
22253
+ void refresh({ invalidate: false });
22181
22254
  }, [refresh]);
22182
22255
  const refreshApiKeys = useCallback(async () => {
22183
22256
  try {
@@ -23015,7 +23088,7 @@ function SecurityPage() {
23015
23088
  (account) => !(account.chain_id === activeChainId && account.wallet_address.toLowerCase() === target)
23016
23089
  );
23017
23090
  if (otherAccounts.length === 0) return null;
23018
- return /* @__PURE__ */ jsxs("div", { className: "rounded-lg bg-status-warning-bg/30 border border-status-warning-text/30 px-3 py-2 space-y-1", children: [
23091
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-lg bg-status-warning-bg border border-status-warning-text/30 px-3 py-2 space-y-1", children: [
23019
23092
  /* @__PURE__ */ jsxs("p", { className: "text-[11px] text-status-warning-text font-medium", children: [
23020
23093
  "This key also owns ",
23021
23094
  otherAccounts.length,
@@ -23330,7 +23403,7 @@ function RowGhostButton({
23330
23403
  type: "button",
23331
23404
  disabled,
23332
23405
  onClick,
23333
- className: "text-[11px] font-medium px-2.5 py-1 rounded-md text-text-secondary hover:text-text-primary hover:bg-chip disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
23406
+ className: "rounded-md px-2.5 py-1 text-[11px] font-medium text-text-secondary transition-colors hover:bg-chip hover:text-text-primary active:bg-chip-active disabled:cursor-not-allowed disabled:opacity-50 max-lg:min-h-[44px] max-lg:px-4 max-lg:text-[13px]",
23334
23407
  children
23335
23408
  }
23336
23409
  );
@@ -23346,7 +23419,7 @@ function RowNeutralButton({
23346
23419
  type: "button",
23347
23420
  disabled,
23348
23421
  onClick,
23349
- className: "text-[11px] font-medium px-2.5 py-1 rounded-md bg-chip text-text-primary hover:bg-chip-hover disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
23422
+ className: "rounded-md bg-chip px-2.5 py-1 text-[11px] font-medium text-text-primary transition-colors hover:bg-chip-hover active:bg-chip-active disabled:cursor-not-allowed disabled:opacity-50 max-lg:min-h-[44px] max-lg:px-4 max-lg:text-[13px]",
23350
23423
  children
23351
23424
  }
23352
23425
  );
@@ -23915,18 +23988,18 @@ var GroupsView = ({
23915
23988
  ] }),
23916
23989
  error && /* @__PURE__ */ jsx(ErrorBanner, { children: error }),
23917
23990
  delegationSession?.kind === "owned" ? /* @__PURE__ */ jsxs("div", { className: "rounded-[22px] border border-cyan-300/[0.18] bg-cyan-400/[0.07] px-3.5 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: [
23918
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-semibold uppercase tracking-[0.12em] text-cyan-300/80", children: "Account ownership path" }),
23991
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-semibold uppercase tracking-[0.12em] text-azure dark:text-cyan-300/80", children: "Account ownership path" }),
23919
23992
  /* @__PURE__ */ jsxs(
23920
23993
  "div",
23921
23994
  {
23922
23995
  className: "mt-2 flex min-w-0 items-center gap-2",
23923
23996
  "aria-label": `${sourceGroup?.name ?? "Owning group"} is operating ${activeOwnedGroup?.name ?? "owned group"}`,
23924
23997
  children: [
23925
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate rounded-lg border border-white/[0.08] bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: "You" }),
23926
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-cyan-300/70", children: "\u2192" }),
23927
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate rounded-lg border border-white/[0.08] bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: sourceGroup?.name ?? compactGroupId(delegationSession.parentGroupId) }),
23928
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-cyan-300/70", children: "\u2192" }),
23929
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate rounded-lg border border-cyan-300/[0.18] bg-cyan-300/[0.08] px-2.5 py-1.5 text-[11px] font-semibold text-cyan-200", children: activeOwnedGroup?.name ?? compactGroupId(delegationSession.currentGroupId) })
23998
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate rounded-lg border border-border-default dark:border-white/[0.08] bg-chip dark:bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: "You" }),
23999
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-azure dark:text-cyan-300/70", children: "\u2192" }),
24000
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate rounded-lg border border-border-default dark:border-white/[0.08] bg-chip dark:bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: sourceGroup?.name ?? compactGroupId(delegationSession.parentGroupId) }),
24001
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-azure dark:text-cyan-300/70", children: "\u2192" }),
24002
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate rounded-lg border border-azure-line dark:border-cyan-300/[0.18] bg-azure-tint dark:bg-cyan-300/[0.08] px-2.5 py-1.5 text-[11px] font-semibold text-azure dark:text-cyan-200", children: activeOwnedGroup?.name ?? compactGroupId(delegationSession.currentGroupId) })
23930
24003
  ]
23931
24004
  }
23932
24005
  ),
@@ -23938,7 +24011,7 @@ var GroupsView = ({
23938
24011
  type: "button",
23939
24012
  onClick: () => void handleReturnToParent(),
23940
24013
  disabled: busyId === `parent:${delegationSession.parentGroupId}`,
23941
- className: "rounded-full border border-cyan-300/[0.16] bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-cyan-200 transition-colors hover:bg-cyan-300/[0.13] disabled:opacity-45",
24014
+ className: "rounded-full border border-azure-line dark:border-cyan-300/[0.16] bg-azure-tint dark:bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-azure dark:text-cyan-200 transition-colors hover:bg-azure-muted dark:hover:bg-cyan-300/[0.13] disabled:opacity-45",
23942
24015
  children: busyId === `parent:${delegationSession.parentGroupId}` ? "Returning..." : `Return to ${sourceGroup?.name ?? "owning group"}`
23943
24016
  }
23944
24017
  ),
@@ -23954,7 +24027,7 @@ var GroupsView = ({
23954
24027
  )
23955
24028
  ] })
23956
24029
  ] }) : actingAsAnyGroup ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 rounded-[22px] border border-amber-300/[0.18] bg-amber-400/[0.08] px-3.5 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: [
23957
- /* @__PURE__ */ jsxs("p", { className: "min-w-0 flex-1 text-[12px] font-semibold leading-5 text-amber-300", children: [
24030
+ /* @__PURE__ */ jsxs("p", { className: "min-w-0 flex-1 text-[12px] font-semibold leading-5 text-status-warning-text dark:text-amber-300", children: [
23958
24031
  "Acting as ",
23959
24032
  sourceGroup?.name ?? "a group",
23960
24033
  ". Operations use its direct delegation token."
@@ -24289,7 +24362,7 @@ function OwnedGroupRow({
24289
24362
  return /* @__PURE__ */ jsxs("li", { className: "px-3.5 py-3", children: [
24290
24363
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
24291
24364
  /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-[11px] font-semibold text-text-secondary", children: sourceName }),
24292
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-cyan-300/70", children: "\u2192" }),
24365
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-azure dark:text-cyan-300/70", children: "\u2192" }),
24293
24366
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] font-semibold text-text-primary", children: projection.group.name })
24294
24367
  ] }),
24295
24368
  /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-center justify-between gap-3", children: [
@@ -24300,7 +24373,7 @@ function OwnedGroupRow({
24300
24373
  type: "button",
24301
24374
  onClick: onSwitch,
24302
24375
  disabled: busy,
24303
- className: "shrink-0 rounded-full border border-cyan-300/[0.16] bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-cyan-200 transition-colors hover:bg-cyan-300/[0.13] disabled:cursor-not-allowed disabled:opacity-45",
24376
+ className: "shrink-0 rounded-full border border-azure-line dark:border-cyan-300/[0.16] bg-azure-tint dark:bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-azure dark:text-cyan-200 transition-colors hover:bg-azure-muted dark:hover:bg-cyan-300/[0.13] disabled:cursor-not-allowed disabled:opacity-45",
24304
24377
  children: busy ? "Checking ownership..." : `Operate as ${projection.group.name}`
24305
24378
  }
24306
24379
  )
@@ -24787,7 +24860,7 @@ function PlusIcon() {
24787
24860
  }
24788
24861
  function RoleBadge({ role }) {
24789
24862
  const label = normalizeRole(role);
24790
- const tone = label === "owner" ? "bg-orange-500/[0.16] text-orange-300" : label === "admin" ? "bg-blue-500/[0.16] text-blue-300" : "bg-chip text-text-secondary";
24863
+ const tone = label === "owner" ? "bg-orange-500/[0.16] text-primary dark:text-orange-300" : label === "admin" ? "bg-blue-500/[0.16] text-azure dark:text-blue-300" : "bg-chip text-text-secondary";
24791
24864
  return /* @__PURE__ */ jsx(
24792
24865
  "span",
24793
24866
  {
@@ -24929,7 +25002,7 @@ function ActiveEnvironmentBadge({
24929
25002
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3 px-1", children: [
24930
25003
  /* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-text-muted", children: "Mode" }),
24931
25004
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 truncate text-right text-[9px] text-text-muted", children: [
24932
- environment.mode === "unknown" && /* @__PURE__ */ jsx("span", { className: "mr-1.5 font-semibold text-amber-400", children: "Unconfigured" }),
25005
+ environment.mode === "unknown" && /* @__PURE__ */ jsx("span", { className: "mr-1.5 font-semibold text-status-warning-text dark:text-amber-400", children: "Unconfigured" }),
24933
25006
  environment.network,
24934
25007
  environment.chainId && /* @__PURE__ */ jsx("span", { className: "ml-1.5 font-mono text-text-secondary", children: environment.chainId })
24935
25008
  ] })
@@ -24943,7 +25016,7 @@ function ActiveEnvironmentBadge({
24943
25016
  /* @__PURE__ */ jsxs(
24944
25017
  "span",
24945
25018
  {
24946
- className: `inline-flex items-center gap-1.5 text-[11px] font-semibold ${environment.mode === "test" ? "text-amber-400" : environment.mode === "live" ? "text-emerald-400" : "text-text-secondary"}`,
25019
+ className: `inline-flex items-center gap-1.5 text-[11px] font-semibold ${environment.mode === "test" ? "text-status-warning-text dark:text-amber-400" : environment.mode === "live" ? "text-status-success-text dark:text-emerald-400" : "text-text-secondary"}`,
24947
25020
  children: [
24948
25021
  /* @__PURE__ */ jsx(
24949
25022
  "span",
@@ -24987,7 +25060,7 @@ function ActiveEnvironmentBadge({
24987
25060
  void switchTo(option);
24988
25061
  }
24989
25062
  },
24990
- className: `flex min-h-[34px] min-w-0 items-center justify-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors focus:outline-none focus-visible:ring-2 disabled:cursor-default ${option.active ? test ? "border-amber-500/40 bg-raised text-amber-400 focus-visible:ring-amber-500/40" : "border-emerald-500/40 bg-raised text-emerald-400 focus-visible:ring-emerald-500/40" : unavailable ? "border-transparent text-text-muted opacity-50" : "border-transparent text-text-secondary hover:bg-raised-hover hover:text-text-primary focus-visible:ring-border-strong"}`,
25063
+ className: `flex min-h-[34px] min-w-0 items-center justify-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors focus:outline-none focus-visible:ring-2 disabled:cursor-default ${option.active ? test ? "border-amber-500/40 bg-raised text-status-warning-text dark:text-amber-400 focus-visible:ring-amber-500/40" : "border-emerald-500/40 bg-raised text-status-success-text dark:text-emerald-400 focus-visible:ring-emerald-500/40" : unavailable ? "border-transparent text-text-muted opacity-50" : "border-transparent text-text-secondary hover:bg-raised-hover hover:text-text-primary focus-visible:ring-border-strong"}`,
24991
25064
  children: busy ? /* @__PURE__ */ jsx(Spinner, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
24992
25065
  option.active && /* @__PURE__ */ jsx(
24993
25066
  "span",
@@ -25058,7 +25131,7 @@ function ActiveEnvironmentBadge({
25058
25131
  "div",
25059
25132
  {
25060
25133
  role: "alert",
25061
- className: "mt-2 rounded-xl border border-red-500/25 bg-red-500/[0.07] px-3 py-2 text-[10px] leading-4 text-red-400",
25134
+ className: "mt-2 rounded-xl border border-status-error-line dark:border-red-500/25 bg-status-error-bg dark:bg-red-500/[0.07] px-3 py-2 text-[10px] leading-4 text-status-error-text dark:text-red-400",
25062
25135
  children: error
25063
25136
  }
25064
25137
  )
@@ -25157,7 +25230,10 @@ var WalletCenterSurface = ({
25157
25230
  modules,
25158
25231
  actors,
25159
25232
  identity,
25160
- initialView = "menu"
25233
+ initialView = "menu",
25234
+ embedded = false,
25235
+ backLabel = "Back",
25236
+ onTitle
25161
25237
  }) => {
25162
25238
  const { pendingList, refreshPending } = useSignatureQueue();
25163
25239
  const {
@@ -25185,6 +25261,10 @@ var WalletCenterSurface = ({
25185
25261
  const cancelGuardRef = useRef(/* @__PURE__ */ new Map());
25186
25262
  const wasOpenRef = useRef(false);
25187
25263
  const walletRootRef = useRef(null);
25264
+ const leaveSection = useCallback(() => {
25265
+ if (embedded && initialView !== "menu") onClose();
25266
+ else setSection("menu");
25267
+ }, [embedded, initialView, onClose]);
25188
25268
  useEffect(() => {
25189
25269
  const justOpened = isOpen && !wasOpenRef.current;
25190
25270
  wasOpenRef.current = isOpen;
@@ -25202,9 +25282,9 @@ var WalletCenterSurface = ({
25202
25282
  useEffect(() => {
25203
25283
  if (!isOpen) return;
25204
25284
  if (activeBuiltinFor(section, modules) === "transactions" && pendingList.length === 0) {
25205
- setSection("menu");
25285
+ leaveSection();
25206
25286
  }
25207
- }, [isOpen, modules, pendingList.length, section]);
25287
+ }, [isOpen, leaveSection, modules, pendingList.length, section]);
25208
25288
  const delegatedGroupId = useMemo(() => {
25209
25289
  if (!delegationToken || typeof window === "undefined") return null;
25210
25290
  return window.localStorage.getItem("delegation_group_id");
@@ -25457,11 +25537,11 @@ var WalletCenterSurface = ({
25457
25537
  setActionError(null);
25458
25538
  try {
25459
25539
  await actor.onSelect();
25460
- setSection("menu");
25540
+ leaveSection();
25461
25541
  } catch (error) {
25462
25542
  setActionError(error?.message ?? "Failed to switch signing context.");
25463
25543
  }
25464
- }, []);
25544
+ }, [leaveSection]);
25465
25545
  const drawerTitle = useMemo(() => {
25466
25546
  if (selected) {
25467
25547
  const label = humanizeMessageType(selected.data?.message_type);
@@ -25469,11 +25549,117 @@ var WalletCenterSurface = ({
25469
25549
  }
25470
25550
  return "Wallet";
25471
25551
  }, [selected, selectedSource]);
25552
+ const hostedTitle = !embedded ? null : selected ? drawerTitle : section === "actors" ? "Signing context" : activeModule?.label ?? null;
25553
+ useEffect(() => {
25554
+ if (!embedded) return void 0;
25555
+ onTitle?.(hostedTitle);
25556
+ return () => onTitle?.(null);
25557
+ }, [embedded, hostedTitle, onTitle]);
25472
25558
  const isCompactView = !selected;
25473
25559
  const drawerPanelClass = isCompactView ? stripLayoutUtilities(walletCenterUi?.drawer?.panel, ["height"]) : walletCenterUi?.drawer?.panel;
25474
25560
  const drawerContentClass = isCompactView ? stripLayoutUtilities(walletCenterUi?.drawer?.content, ["overflow"]) : walletCenterUi?.drawer?.content;
25475
- const walletRootClass = isCompactView ? stripLayoutUtilities(walletCenterUi?.root, ["height", "overflow"]) : walletCenterUi?.root;
25476
- const walletMainClass = isCompactView ? stripLayoutUtilities(walletCenterUi?.main, ["height", "overflow"]) : walletCenterUi?.main;
25561
+ const walletRootClass = embedded ? void 0 : isCompactView ? stripLayoutUtilities(walletCenterUi?.root, ["height", "overflow"]) : walletCenterUi?.root;
25562
+ const walletMainClass = embedded ? void 0 : isCompactView ? stripLayoutUtilities(walletCenterUi?.main, ["height", "overflow"]) : walletCenterUi?.main;
25563
+ const body = /* @__PURE__ */ jsx("div", { ref: walletRootRef, className: cx4(isCompactView ? "w-full" : "flex h-full overflow-hidden", walletRootClass), children: /* @__PURE__ */ jsx("div", { className: cx4(isCompactView ? "min-h-0 w-full" : "flex-1 min-h-0 overflow-hidden", walletMainClass), children: selected ? /* @__PURE__ */ jsx(
25564
+ DetailPane,
25565
+ {
25566
+ message: selected,
25567
+ source: selectedSource,
25568
+ userId,
25569
+ onBack: handleBackToList,
25570
+ hideBack: embedded,
25571
+ onSigned: async (m) => {
25572
+ onSigned?.(m);
25573
+ setSelected(null);
25574
+ await refreshPending();
25575
+ },
25576
+ onRetry: handleRetry,
25577
+ onSwitchToSign: () => setSelectedSource("pending"),
25578
+ selectorRegistry,
25579
+ addressLabels,
25580
+ renderSimpleSummary
25581
+ }
25582
+ ) : section === "menu" ? /* @__PURE__ */ jsx(
25583
+ WalletMenu,
25584
+ {
25585
+ identity: resolvedIdentity,
25586
+ items: menuItems,
25587
+ actors: resolvedActors,
25588
+ actionError,
25589
+ onSelectModule: handleSelectModule,
25590
+ onOpenActors: () => setSection("actors"),
25591
+ onClose: embedded ? void 0 : onClose,
25592
+ onSignOut: handleSignOut
25593
+ }
25594
+ ) : section === "actors" ? /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-col", children: [
25595
+ embedded ? null : /* @__PURE__ */ jsx(SectionHeader, { title: "Signing context", onBack: leaveSection }),
25596
+ /* @__PURE__ */ jsx(
25597
+ ActorsPane,
25598
+ {
25599
+ actors: resolvedActors,
25600
+ error: actionError,
25601
+ onSelect: handleSelectActor
25602
+ }
25603
+ )
25604
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-col", children: [
25605
+ embedded ? null : /* @__PURE__ */ jsx(SectionHeader, { title: activeModule?.label ?? "Wallet", onBack: leaveSection }),
25606
+ /* @__PURE__ */ jsx("div", { className: "min-h-0", children: activeModule ? /* @__PURE__ */ jsx(
25607
+ SectionPane,
25608
+ {
25609
+ module: activeModule,
25610
+ panelContext,
25611
+ pendingList,
25612
+ busyId,
25613
+ actionError,
25614
+ onSelectPending: (m) => handleSelect(m, "pending"),
25615
+ onSign: handleSign,
25616
+ onCancel: handleCancel,
25617
+ historyItems: filteredHistoryItems,
25618
+ historyFilter,
25619
+ historyLoading,
25620
+ historyError,
25621
+ historyHasMore: historyHasMore && historyItems.length < HISTORY_MAX_ITEMS,
25622
+ historyAtCap: historyItems.length >= HISTORY_MAX_ITEMS,
25623
+ historyLoadedOnce,
25624
+ showHistoryFilters: !embedded,
25625
+ onFilterChange: handleFilterChange,
25626
+ onLoadMore: handleLoadMore,
25627
+ onSelectHistory: (m) => handleSelect(m, "history"),
25628
+ onRetry: handleRetryFromRow,
25629
+ classNames: walletCenterUi
25630
+ }
25631
+ ) : /* @__PURE__ */ jsx(
25632
+ EmptyState,
25633
+ {
25634
+ title: "This wallet view is unavailable",
25635
+ subtitle: "Return to the wallet menu and choose another destination.",
25636
+ classNames: walletCenterUi
25637
+ }
25638
+ ) })
25639
+ ] }) }) });
25640
+ if (embedded) {
25641
+ const back = selected ? { label: activeModule?.label ?? "Wallet", onPick: handleBackToList } : section === "menu" ? null : { label: backLabel, onPick: leaveSection };
25642
+ const sectionControls = !selected && activeBuiltin === "history" ? /* @__PURE__ */ jsx(FilterChips, { filter: historyFilter, onChange: handleFilterChange }) : null;
25643
+ return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [
25644
+ /* @__PURE__ */ jsx("div", { className: cx4("min-h-0 flex-1", isCompactView ? "overflow-y-auto" : "overflow-hidden"), children: body }),
25645
+ back || sectionControls ? /* @__PURE__ */ jsxs("nav", { "aria-label": "Wallet controls", className: "flex h-12 shrink-0 items-center gap-2 border-t border-border-light px-4", children: [
25646
+ back ? /* @__PURE__ */ jsxs(
25647
+ "button",
25648
+ {
25649
+ type: "button",
25650
+ onClick: back.onPick,
25651
+ className: "flex h-8 shrink-0 items-center gap-1.5 rounded-full bg-chip-hover pl-2 pr-3 text-[12.5px] font-medium text-text-primary transition-colors hover:bg-raised-hover",
25652
+ children: [
25653
+ /* @__PURE__ */ jsx(IconChevronLeft, {}),
25654
+ back.label
25655
+ ]
25656
+ }
25657
+ ) : null,
25658
+ back && sectionControls ? /* @__PURE__ */ jsx("span", { className: "h-5 w-px shrink-0 bg-border-strong", "aria-hidden": "true" }) : null,
25659
+ sectionControls ? /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center gap-2 overflow-x-auto", children: sectionControls }) : null
25660
+ ] }) : null
25661
+ ] });
25662
+ }
25477
25663
  return /* @__PURE__ */ jsx(
25478
25664
  Drawer,
25479
25665
  {
@@ -25491,89 +25677,7 @@ var WalletCenterSurface = ({
25491
25677
  closeButtonClassName: walletCenterUi?.drawer?.closeButton,
25492
25678
  contentClassName: drawerContentClass,
25493
25679
  contentStyle: isCompactView ? { flex: "0 1 auto", maxHeight: "calc(100vh - 24px)", overflowY: "auto", paddingBottom: 12 } : void 0,
25494
- children: /* @__PURE__ */ jsx("div", { ref: walletRootRef, className: cx4(isCompactView ? "w-full" : "flex h-full overflow-hidden", walletRootClass), children: /* @__PURE__ */ jsx("div", { className: cx4(isCompactView ? "min-h-0 w-full" : "flex-1 min-h-0 overflow-hidden", walletMainClass), children: selected ? /* @__PURE__ */ jsx(
25495
- DetailPane,
25496
- {
25497
- message: selected,
25498
- source: selectedSource,
25499
- userId,
25500
- onBack: handleBackToList,
25501
- onSigned: async (m) => {
25502
- onSigned?.(m);
25503
- setSelected(null);
25504
- await refreshPending();
25505
- },
25506
- onRetry: handleRetry,
25507
- onSwitchToSign: () => setSelectedSource("pending"),
25508
- selectorRegistry,
25509
- addressLabels,
25510
- renderSimpleSummary
25511
- }
25512
- ) : section === "menu" ? /* @__PURE__ */ jsx(
25513
- WalletMenu,
25514
- {
25515
- identity: resolvedIdentity,
25516
- items: menuItems,
25517
- actors: resolvedActors,
25518
- actionError,
25519
- onSelectModule: handleSelectModule,
25520
- onOpenActors: () => setSection("actors"),
25521
- onClose,
25522
- onSignOut: handleSignOut
25523
- }
25524
- ) : section === "actors" ? /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-col", children: [
25525
- /* @__PURE__ */ jsx(SectionHeader, { title: "Signing context", onBack: () => setSection("menu") }),
25526
- /* @__PURE__ */ jsx(
25527
- ActorsPane,
25528
- {
25529
- actors: resolvedActors,
25530
- error: actionError,
25531
- onSelect: handleSelectActor
25532
- }
25533
- )
25534
- ] }) : /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-col", children: [
25535
- /* @__PURE__ */ jsx(
25536
- SectionHeader,
25537
- {
25538
- title: activeModule?.label ?? "Wallet",
25539
- onBack: () => {
25540
- setSection("menu");
25541
- }
25542
- }
25543
- ),
25544
- /* @__PURE__ */ jsx("div", { className: "min-h-0", children: activeModule ? /* @__PURE__ */ jsx(
25545
- SectionPane,
25546
- {
25547
- module: activeModule,
25548
- panelContext,
25549
- pendingList,
25550
- busyId,
25551
- actionError,
25552
- onSelectPending: (m) => handleSelect(m, "pending"),
25553
- onSign: handleSign,
25554
- onCancel: handleCancel,
25555
- historyItems: filteredHistoryItems,
25556
- historyFilter,
25557
- historyLoading,
25558
- historyError,
25559
- historyHasMore: historyHasMore && historyItems.length < HISTORY_MAX_ITEMS,
25560
- historyAtCap: historyItems.length >= HISTORY_MAX_ITEMS,
25561
- historyLoadedOnce,
25562
- onFilterChange: handleFilterChange,
25563
- onLoadMore: handleLoadMore,
25564
- onSelectHistory: (m) => handleSelect(m, "history"),
25565
- onRetry: handleRetryFromRow,
25566
- classNames: walletCenterUi
25567
- }
25568
- ) : /* @__PURE__ */ jsx(
25569
- EmptyState,
25570
- {
25571
- title: "This wallet view is unavailable",
25572
- subtitle: "Return to the wallet menu and choose another destination.",
25573
- classNames: walletCenterUi
25574
- }
25575
- ) })
25576
- ] }) }) })
25680
+ children: body
25577
25681
  }
25578
25682
  );
25579
25683
  };
@@ -25695,7 +25799,7 @@ function WalletMenu({
25695
25799
  action.id
25696
25800
  );
25697
25801
  }),
25698
- /* @__PURE__ */ jsx(
25802
+ onClose ? /* @__PURE__ */ jsx(
25699
25803
  "button",
25700
25804
  {
25701
25805
  type: "button",
@@ -25705,7 +25809,7 @@ function WalletMenu({
25705
25809
  "aria-label": "Close wallet center",
25706
25810
  children: /* @__PURE__ */ jsx(IconX, {})
25707
25811
  }
25708
- )
25812
+ ) : null
25709
25813
  ] })
25710
25814
  ] }),
25711
25815
  /* @__PURE__ */ jsx(ActiveEnvironmentBadge, {})
@@ -25722,7 +25826,7 @@ function WalletMenu({
25722
25826
  onClick: onOpenActors,
25723
25827
  className: "flex min-h-[52px] w-full items-center gap-3 px-4 py-2 text-left text-[14px] font-semibold text-text-primary transition-colors hover:bg-raised-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-orange-400/70",
25724
25828
  children: [
25725
- /* @__PURE__ */ jsx("span", { className: "inline-flex h-7 w-7 items-center justify-center rounded-lg bg-orange-500/10 text-orange-400", children: activeActor?.kind === "self" ? /* @__PURE__ */ jsx(IconUser, {}) : /* @__PURE__ */ jsx(IconBuilding, {}) }),
25829
+ /* @__PURE__ */ jsx("span", { className: "inline-flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-primary dark:text-orange-400", children: activeActor?.kind === "self" ? /* @__PURE__ */ jsx(IconUser, {}) : /* @__PURE__ */ jsx(IconBuilding, {}) }),
25726
25830
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
25727
25831
  /* @__PURE__ */ jsx("span", { className: "block truncate", children: activeActor?.label ?? userName }),
25728
25832
  /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-[10px] font-medium capitalize text-text-muted", children: activeActor?.kind ?? "self" })
@@ -25737,7 +25841,7 @@ function WalletMenu({
25737
25841
  {
25738
25842
  type: "button",
25739
25843
  onClick: onSignOut,
25740
- className: "mt-3 flex min-h-[48px] w-full items-center justify-center gap-2 rounded-[24px] bg-red-500/10 px-4 py-3 text-[14px] font-semibold text-red-400 transition-colors hover:bg-red-500/15 focus:outline-none focus-visible:ring-2 focus-visible:ring-red-400/70",
25844
+ className: "mt-3 flex min-h-[48px] w-full items-center justify-center gap-2 rounded-[24px] bg-status-error-bg dark:bg-red-500/10 px-4 py-3 text-[14px] font-semibold text-status-error-text dark:text-red-400 transition-colors hover:bg-red-500/15 focus:outline-none focus-visible:ring-2 focus-visible:ring-red-400/70",
25741
25845
  children: [
25742
25846
  /* @__PURE__ */ jsx(IconSignOut, {}),
25743
25847
  "Sign out"
@@ -25769,7 +25873,7 @@ function WalletMenuRow({
25769
25873
  {
25770
25874
  className: cx4(
25771
25875
  "mr-3 inline-flex h-8 w-8 items-center justify-center rounded-lg",
25772
- urgent ? "bg-violet-500/20 text-orange-400" : active ? "bg-surface-alt text-text-secondary" : "bg-surface-alt text-text-muted"
25876
+ urgent ? "bg-violet-500/20 text-primary dark:text-orange-400" : active ? "bg-surface-alt text-text-secondary" : "bg-surface-alt text-text-muted"
25773
25877
  ),
25774
25878
  children: item.icon
25775
25879
  }
@@ -25836,6 +25940,7 @@ function SectionPane(props) {
25836
25940
  {
25837
25941
  items: props.historyItems,
25838
25942
  filter: props.historyFilter,
25943
+ showFilters: props.showHistoryFilters ?? true,
25839
25944
  onFilterChange: props.onFilterChange,
25840
25945
  loading: props.historyLoading,
25841
25946
  error: props.historyError,
@@ -26008,7 +26113,7 @@ function DirectoryPane({
26008
26113
  {
26009
26114
  type: "button",
26010
26115
  onClick: () => setQuery(""),
26011
- className: "mt-2 min-h-[44px] rounded-xl px-3 text-[12px] font-semibold text-orange-400 hover:bg-orange-400/10",
26116
+ className: "mt-2 min-h-[44px] rounded-xl px-3 text-[12px] font-semibold text-primary dark:text-orange-400 hover:bg-primary/10 dark:hover:bg-orange-400/10",
26012
26117
  children: "Clear search"
26013
26118
  }
26014
26119
  )
@@ -26067,6 +26172,7 @@ function PendingSection({
26067
26172
  )) });
26068
26173
  }
26069
26174
  function HistorySection({
26175
+ showFilters = true,
26070
26176
  items,
26071
26177
  filter,
26072
26178
  onFilterChange,
@@ -26082,7 +26188,7 @@ function HistorySection({
26082
26188
  classNames
26083
26189
  }) {
26084
26190
  return /* @__PURE__ */ jsxs("div", { className: cx4("p-3 space-y-3", classNames?.listSection), children: [
26085
- /* @__PURE__ */ jsx(FilterChips, { filter, onChange: onFilterChange }),
26191
+ showFilters ? /* @__PURE__ */ jsx(FilterChips, { filter, onChange: onFilterChange }) : null,
26086
26192
  error && /* @__PURE__ */ jsx(ErrorBanner, { children: error }),
26087
26193
  !loadedOnce && loading && /* @__PURE__ */ jsx("div", { className: "py-10 flex justify-center", children: /* @__PURE__ */ jsx(LoadingSpinner, { size: "md" }) }),
26088
26194
  loadedOnce && items.length === 0 && !loading && /* @__PURE__ */ jsx(
@@ -26165,6 +26271,7 @@ function DetailPane({
26165
26271
  source,
26166
26272
  userId,
26167
26273
  onBack,
26274
+ hideBack = false,
26168
26275
  onSigned,
26169
26276
  onRetry,
26170
26277
  onSwitchToSign,
@@ -26174,7 +26281,7 @@ function DetailPane({
26174
26281
  }) {
26175
26282
  const drawerKey = `signature-${source}-${message.id}`;
26176
26283
  return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col h-full", children: [
26177
- /* @__PURE__ */ jsx("div", { className: "px-3 py-2.5 border-b border-border-light", children: /* @__PURE__ */ jsxs(
26284
+ hideBack ? null : /* @__PURE__ */ jsx("div", { className: "px-3 py-2.5 border-b border-border-light", children: /* @__PURE__ */ jsxs(
26178
26285
  "button",
26179
26286
  {
26180
26287
  type: "button",
@@ -26259,9 +26366,9 @@ function WalletCenter({
26259
26366
  onCanceled
26260
26367
  }) {
26261
26368
  const { user } = useAuth();
26262
- const { isOpen, requestedView, closeWalletCenter } = useWalletCenter();
26369
+ const { isOpen, requestedView, closeWalletCenter, host, hostOptions, setHostTitle } = useWalletCenter();
26263
26370
  if (!isOpen || !user?.id) return null;
26264
- return /* @__PURE__ */ jsx(
26371
+ const surface = /* @__PURE__ */ jsx(
26265
26372
  WalletCenterSurface,
26266
26373
  {
26267
26374
  isOpen: true,
@@ -26276,9 +26383,13 @@ function WalletCenter({
26276
26383
  renderSimpleSummary,
26277
26384
  onSigned,
26278
26385
  onRetried,
26279
- onCanceled
26386
+ onCanceled,
26387
+ embedded: Boolean(host),
26388
+ backLabel: hostOptions.backLabel,
26389
+ onTitle: setHostTitle
26280
26390
  }
26281
26391
  );
26392
+ return host ? createPortal(surface, host) : surface;
26282
26393
  }
26283
26394
  function WalletCenterTrigger({
26284
26395
  variant = "icon",
@@ -27932,7 +28043,7 @@ var BillingCenter = ({ dense = false }) => {
27932
28043
  if (notConfigured) {
27933
28044
  return /* @__PURE__ */ jsxs("div", { className: outerClass, children: [
27934
28045
  !dense && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
27935
- /* @__PURE__ */ jsxs("h1", { className: "text-lg font-semibold text-text-primary", children: [
28046
+ /* @__PURE__ */ jsxs("h1", { className: "text-lg font-semibold text-text-primary max-sm:sr-only", children: [
27936
28047
  "Usage & billing",
27937
28048
  !isLiveMode() && paymentsUrlMap() && /* @__PURE__ */ jsx("span", { className: "ml-2 align-middle inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-semibold uppercase tracking-wider bg-amber-500/15 text-amber-600 ring-1 ring-amber-500/40", children: "Test mode" })
27938
28049
  ] }),
@@ -28018,7 +28129,7 @@ var BillingCenter = ({ dense = false }) => {
28018
28129
  const recoveryAction = summary ? billingRecoveryAction(summary) : null;
28019
28130
  return /* @__PURE__ */ jsxs("div", { className: outerClass, children: [
28020
28131
  !dense && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
28021
- /* @__PURE__ */ jsxs("h1", { className: "text-lg font-semibold text-text-primary", children: [
28132
+ /* @__PURE__ */ jsxs("h1", { className: "text-lg font-semibold text-text-primary max-sm:sr-only", children: [
28022
28133
  "Usage & billing",
28023
28134
  !isLiveMode() && paymentsUrlMap() && /* @__PURE__ */ jsx("span", { className: "ml-2 align-middle inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-semibold uppercase tracking-wider bg-amber-500/15 text-amber-600 ring-1 ring-amber-500/40", children: "Test mode" })
28024
28135
  ] }),
@@ -29740,7 +29851,7 @@ function BusinessVerificationSection({
29740
29851
  };
29741
29852
  const copy = STATUS_COPY[status] ?? STATUS_COPY.unverified;
29742
29853
  const impl = flowInstance ? resolveKycInstance(config, flowInstance) : null;
29743
- return /* @__PURE__ */ jsxs("section", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4 space-y-3", children: [
29854
+ return /* @__PURE__ */ jsxs("section", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4 space-y-3", children: [
29744
29855
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
29745
29856
  /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Business verification" }),
29746
29857
  /* @__PURE__ */ jsx(
@@ -30737,7 +30848,7 @@ var PendingPaymentCard = ({
30737
30848
  {
30738
30849
  className: [
30739
30850
  "flex items-center gap-3 px-3 py-2 border-b transition-colors",
30740
- isHighlighted ? "border-status-warning-text/40 bg-status-warning-bg/30" : "border-border-light hover:bg-chip",
30851
+ isHighlighted ? "border-status-warning-text/40 bg-status-warning-bg" : "border-border-light hover:bg-chip",
30741
30852
  className
30742
30853
  ].join(" "),
30743
30854
  children: [
@@ -30805,7 +30916,7 @@ var PendingPaymentCard = ({
30805
30916
  {
30806
30917
  className: [
30807
30918
  "rounded-lg border p-4 transition-shadow",
30808
- isHighlighted ? "border-status-warning-text/40 bg-status-warning-bg/40" : "border-border-default bg-surface",
30919
+ isHighlighted ? "border-status-warning-text/40 bg-status-warning-bg" : "border-border-default bg-surface",
30809
30920
  "hover:shadow-sm",
30810
30921
  className
30811
30922
  ].join(" "),
@@ -31447,4 +31558,4 @@ init_YieldFabricLogo();
31447
31558
  //! This service handles all key management operations including creation, retrieval,
31448
31559
  //! rotation, deletion, and cryptographic operations.
31449
31560
 
31450
- export { AccessFlow, AccountOpeningPanel, AddCardDialog, AvatarPicker, BankAccountCard, BillingCenter, BillingChip, BrandingProvider, BrowserLocalStorageTokenStore, BusinessVerificationSection, Button, BuyCreditsDialog, CHOOSER_META, CREDIT_CHECKOUT_RETRY_REQUESTED_EVENT, CREDIT_CHECKOUT_RETRY_REQUIRED_EVENT, CREDIT_CHECKOUT_SYNCED_EVENT, Card, CardRequiredError, CardRequiredHost, ChainAccountActivationError, ChainAccountActivationHttpError, ChainAccountRequiredError, ChainAccountRequiredHost, ChainMismatchError, ChainNotConfiguredError, ChangePasswordModal_default as ChangePasswordModal, CreditExhaustedHost, CreditRequiredError, DEFAULT_APP_DELEGATION_SCOPE, DEFAULT_AUTH_PROVIDERS, DEFAULT_KYC_PROVIDERS, DEFAULT_MESSAGES, DEFAULT_OWNED_GROUP_DELEGATION_SCOPE, DailySpendChart, Drawer, EarningsSection, EntitySSEProvider, GROUP_ACCOUNT_OPERATION_KEYS, GenericSignDialog, globalNotificationService_default as GlobalNotificationService, GroupBillingSection, GroupOwnershipPanel, IdentityCard, IncomingPaymentsCenter, IncomingPaymentsInbox, IncomingPaymentsLauncher, KeyBalances_default as KeyBalances, SecurityPage as KeysManager, LineItemDrawer, LineItemsTable, LoadingSpinner, LoginAltMethods, LoginComponent, LoginForm, LoginLayout, LoginPage, LoginShell, METER_LABELS, OnboardingMethodCard, OnboardingPlanHttpError, OnboardingPolicyHttpError, OnboardingPolicySection, OnboardingWizard, PaymentStatusEnum, PendingPaymentCard, PhoneVerification, Profile as ProfileEditor, ProviderConfigProvider, RedirectTo, SendFromKey_default as SendFromKey, SendPaymentDrawer, SendPaymentForm, SignatureCenterRow, SignaturePreviewDrawer as SignatureDrawer, SignatureQueueProvider, SignatureWorkflow, SkeletonAvatar, SponsorshipSessionError, StepShell, Toast, VerificationRequiredError, VerificationRequiredHost, VerifiedBadge, WalletAuthProvider, WalletCenter, WalletCenterProvider, WalletCenterTrigger, WalletConfigProvider, WalletIdentityError, WalletNotRegisteredError, WalletProvider, YieldFabricLockup, activateChainAccount, activateChainAccountAndRefresh, addChainParamsByChainId, agentMinutesFromMicros, apiKeysService, assertChain, authService, balanceService, billingGateInfoForActiveToken, billingGateInfoFromToken, billingRecoveryAction, billingService, breakdownKeyLabel, buildAuthRegistry, buildCreditCheckoutReturnUrls, buildInbox, buildKycRegistry, buildSendParams, canReexecuteMessage, canonicalEip155ChainId, canonicalEvmAddress, canonicalGroupOperationUuid, canonicalU256Decimal, cardRequiredGate, chainAccountMode, chainAccountRequiredGate, chainAddressesToLabels, chainIdToHex, chainNames, computeMetaTransactionDigest, confirmMyEmailVerification, contractNeedsObligationAccept, convertAmountToRaw, createPasskey, createStripeIdentitySession, createSumsubAccessToken, creditCheckoutTargetGroupId, creditGateInfoForActiveToken, creditPlanTotalAllowanceUsd, creditRequiredGate, decodeJwtPayload as decodeJwtClaims, defaultTokenStore, defaultWalletCenterModules, defineWalletDirectory, defineWalletPanel, defineWalletRoute, delegationService, effectiveStatus, enabledPaymentChainIds, encodeApprove, encodeBalanceOf, encodeTransfer, ensureCardOnFile, ensureCreditAvailable, ensureVerified, exchange, extractCurrency, extractTokenAssetId, featureLabel, fetchAccountOpeningStatus, fetchNonce, fetchVerificationStatus, fetchWithChainAccountActivationRetry, findWalletRegistration, formatAgentMinutes, formatAgentTime, formatPages, formatPayment, formatRelativeTime, formatTxHashShort, formatUnits, formatUsdMicros, freshTokenForSameChainActor, gasOpLabel, getActiveChainId, getActiveUserChainId, getAddChainParams, getAuthServiceUrl, getBlockExplorer, getBlockExplorerAddressUrl, getBlockExplorerTxUrl, getChainAccountActivationStatus, getChainConfig, getChainIdFromToken, getCurrentChainId, getDefaultChainAddressLabels, getDefaultChainId, getErc20Allowance, getErc20Balance, getErc20Decimals, getErc20Symbol, getIdentityStatus, getIdentityStatusForProviders, getMyEmailVerificationStatus, getMyProfile, getNativeBalance, getPaymentsServiceUrl, getReceipt, getWebSocketUrl, groupInbox, groupsService, hasActiveAuthToken, humanizeMessageType, invalidateOnboardingState, invalidateWalletCount, isEoaKey, isExactSponsoredUserToken, isLiveMode, isPaymentChainEnabled, isStaffRole, itemAgentTime, itemLabel, keyPairToEoaHandle, keysService, knownAuthProviderIds, knownKycProviderIds, kycKindOf, link, listMyLoginKeys, listMyVerifications, llmCategoryLabel, makeWalletId, manualChainAccountRequiredContext, messagesService, needsPaymentAcceptance, nftOwnedSignerBinding, onboardingPlanService, onboardingPolicyService, ownedGroupUserSignerCustody, parseChainAccountRequired, parseChainAccountRequiredRest, parseGroupAccountOperationWire, parseUnits, parseVerificationRequired, parseWalletId, passkeyLabel, patchMyEmail, patchMyProfile, paymentsService, paymentsUrlMap, personalJwtHasGroupPayer, personalSessionHasGroupPayer, promptCardCapture, promptCreditPurchase, promptVerification, readCreditCheckoutReturnMarker, recordCredentialIssued, refreshChainAccountSession, registerBlockExplorer, registeredWalletsFromMetadata, remintTokensAfterCardChange, requireActiveUserChainId, requireChainIdFromToken, requireWalletRegistrationChain, requireWalletRegistrationSessionChain, resetDecimalsWarningCache, resolveAuth, resolveKyc, resolveKycInstance, resolvePaymentDirection, resolveWalletIdentityForChain, retryOnceAfterChainAccountActivation, selectWalletRegistration, setAuthRegistry, setGroupVerificationProfiles, setKycRegistry, setModeConfig, signInChallengeViaPasskey, signInWithPasskey, signUpRegisterViaPasskey, signUpWithPasskey, signWithPasskey, signatureSignin, snapshotNeedsPrepaidPlan, startMyEmailVerification, statusToColor, subscribeEntityEvents, switchChain, syntheticPasskeyAddress, testChainIds, tokenManager, tryParseWalletId, unlink, useAuth, useAuthContext, useBranding, useEntitySSE, useEoaSend, useForm, useGenericSigner, useIncomingPaymentDecimals, useIncomingPayments, useKeyBalance, useLogin, useLoginWithForm, useOnboardingState2 as useOnboardingRouting, useOnboardingState, usePaymentDecimals, useProviderConfig, useSendPayment, useSignatureQueue, useTapToCancel, useThemeClasses, useTokenStore, useWalletCenter, useWalletConfig, useWalletNavigate, useWalletSigner, userIdentityStatusScopes, validateWalletCenterModules, verificationRequiredGate, verifyMetaTransactionDigest, verifyNftAuthorizationBinding, walletCenter, walletRegistrationAuthContext, walletRegistrationMatches, walletRegistrationsForChain, withoutCreditCheckoutReturnMarker };
31561
+ export { AccessFlow, AccountOpeningPanel, AddCardDialog, AvatarPicker, BankAccountCard, BillingCenter, BillingChip, BrandingProvider, BrowserLocalStorageTokenStore, BusinessVerificationSection, Button, BuyCreditsDialog, CHOOSER_META, CREDIT_CHECKOUT_RETRY_REQUESTED_EVENT, CREDIT_CHECKOUT_RETRY_REQUIRED_EVENT, CREDIT_CHECKOUT_SYNCED_EVENT, Card, CardRequiredError, CardRequiredHost, ChainAccountActivationError, ChainAccountActivationHttpError, ChainAccountRequiredError, ChainAccountRequiredHost, ChainMismatchError, ChainNotConfiguredError, ChangePasswordModal_default as ChangePasswordModal, CreditExhaustedHost, CreditRequiredError, DEFAULT_APP_DELEGATION_SCOPE, DEFAULT_AUTH_PROVIDERS, DEFAULT_KYC_PROVIDERS, DEFAULT_MESSAGES, DEFAULT_OWNED_GROUP_DELEGATION_SCOPE, DailySpendChart, Drawer, EarningsSection, EntitySSEProvider, GROUP_ACCOUNT_OPERATION_KEYS, GenericSignDialog, globalNotificationService_default as GlobalNotificationService, GroupBillingSection, GroupOwnershipPanel, IdentityCard, IncomingPaymentsCenter, IncomingPaymentsInbox, IncomingPaymentsLauncher, KeyBalances_default as KeyBalances, SecurityPage as KeysManager, LineItemDrawer, LineItemsTable, LoadingSpinner, LoginAltMethods, LoginComponent, LoginForm, LoginLayout, LoginPage, LoginShell, METER_LABELS, OnboardingMethodCard, OnboardingPlanHttpError, OnboardingPolicyHttpError, OnboardingPolicySection, OnboardingWizard, PaymentStatusEnum, PendingPaymentCard, PhoneVerification, Profile as ProfileEditor, ProviderConfigProvider, RedirectTo, SendFromKey_default as SendFromKey, SendPaymentDrawer, SendPaymentForm, SignatureCenterRow, SignaturePreviewDrawer as SignatureDrawer, SignatureQueueProvider, SignatureWorkflow, SkeletonAvatar, SponsorshipSessionError, StepShell, Toast, VerificationRequiredError, VerificationRequiredHost, VerifiedBadge, WalletAuthProvider, WalletCenter, WalletCenterProvider, WalletCenterTrigger, WalletConfigProvider, WalletIdentityError, WalletNotRegisteredError, WalletProvider, YieldFabricLockup, activateChainAccount, activateChainAccountAndRefresh, addChainParamsByChainId, agentMinutesFromMicros, apiKeysService, assertChain, authService, balanceService, billingGateInfoForActiveToken, billingGateInfoFromToken, billingRecoveryAction, billingService, breakdownKeyLabel, buildAuthRegistry, buildCreditCheckoutReturnUrls, buildInbox, buildKycRegistry, buildSendParams, canReexecuteMessage, canonicalEip155ChainId, canonicalEvmAddress, canonicalGroupOperationUuid, canonicalU256Decimal, cardRequiredGate, chainAccountMode, chainAccountRequiredGate, chainAddressesToLabels, chainIdToHex, chainNames, computeMetaTransactionDigest, confirmMyEmailVerification, contractNeedsObligationAccept, convertAmountToRaw, createPasskey, createStripeIdentitySession, createSumsubAccessToken, creditCheckoutTargetGroupId, creditGateInfoForActiveToken, creditPlanTotalAllowanceUsd, creditRequiredGate, decodeJwtPayload as decodeJwtClaims, defaultTokenStore, defaultWalletCenterModules, defineWalletDirectory, defineWalletPanel, defineWalletRoute, delegationService, effectiveStatus, enabledPaymentChainIds, encodeApprove, encodeBalanceOf, encodeTransfer, ensureCardOnFile, ensureCreditAvailable, ensureVerified, exchange, extractCurrency, extractTokenAssetId, featureLabel, fetchAccountOpeningStatus, fetchNonce, fetchVerificationStatus, fetchWithChainAccountActivationRetry, findWalletRegistration, formatAgentMinutes, formatAgentTime, formatPages, formatPayment, formatRelativeTime, formatTxHashShort, formatUnits, formatUsdMicros, freshTokenForSameChainActor, gasOpLabel, getActiveChainId, getActiveUserChainId, getAddChainParams, getAuthServiceUrl, getBlockExplorer, getBlockExplorerAddressUrl, getBlockExplorerTxUrl, getChainAccountActivationStatus, getChainConfig, getChainIdFromToken, getCurrentChainId, getDefaultChainAddressLabels, getDefaultChainId, getErc20Allowance, getErc20Balance, getErc20Decimals, getErc20Symbol, getIdentityStatus, getIdentityStatusForProviders, getMyEmailVerificationStatus, getMyProfile, getNativeBalance, getPaymentsServiceUrl, getReceipt, getWebSocketUrl, groupInbox, groupsService, hasActiveAuthToken, humanizeMessageType, invalidateOnboardingState, invalidateWalletCount, isEoaKey, isExactSponsoredUserToken, isLiveMode, isPaymentChainEnabled, isStaffRole, itemAgentTime, itemLabel, keyPairToEoaHandle, keysService, knownAuthProviderIds, knownKycProviderIds, kycKindOf, link, listMyLoginKeys, listMyVerifications, llmCategoryLabel, makeWalletId, manualChainAccountRequiredContext, messagesService, needsPaymentAcceptance, nftOwnedSignerBinding, onboardingPlanService, onboardingPolicyService, ownedGroupUserSignerCustody, parseChainAccountRequired, parseChainAccountRequiredRest, parseGroupAccountOperationWire, parseUnits, parseVerificationRequired, parseWalletId, passkeyLabel, patchMyEmail, patchMyProfile, paymentsService, paymentsUrlMap, personalJwtHasGroupPayer, personalSessionHasGroupPayer, promptCardCapture, promptCreditPurchase, promptVerification, readCreditCheckoutReturnMarker, recordCredentialIssued, refreshChainAccountSession, registerBlockExplorer, registeredWalletsFromMetadata, remintTokensAfterCardChange, requireActiveUserChainId, requireChainIdFromToken, requireWalletRegistrationChain, requireWalletRegistrationSessionChain, resetDecimalsWarningCache, resolveAuth, resolveKyc, resolveKycInstance, resolvePaymentDirection, resolveWalletIdentityForChain, retryOnceAfterChainAccountActivation, selectWalletRegistration, setAuthRegistry, setGroupVerificationProfiles, setKycRegistry, setModeConfig, signInChallengeViaPasskey, signInWithPasskey, signUpRegisterViaPasskey, signUpWithPasskey, signWithPasskey, signatureSignin, snapshotNeedsPrepaidPlan, startMyEmailVerification, statusToColor, subscribeEntityEvents, subscribeJsonEvents, switchChain, syntheticPasskeyAddress, testChainIds, tokenManager, tryParseWalletId, unlink, useAuth, useAuthContext, useBranding, useEntitySSE, useEoaSend, useForm, useGenericSigner, useIncomingPaymentDecimals, useIncomingPayments, useKeyBalance, useLogin, useLoginWithForm, useOnboardingState2 as useOnboardingRouting, useOnboardingState, usePaymentDecimals, useProviderConfig, useSendPayment, useSignatureQueue, useTapToCancel, useThemeClasses, useTokenStore, useWalletCenter, useWalletConfig, useWalletNavigate, useWalletSigner, userIdentityStatusScopes, validateWalletCenterModules, verificationRequiredGate, verifyMetaTransactionDigest, verifyNftAuthorizationBinding, walletCenter, walletRegistrationAuthContext, walletRegistrationMatches, walletRegistrationsForChain, withoutCreditCheckoutReturnMarker };