@arcblock/ux 3.1.30 → 3.1.32

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.
@@ -1,8 +1,8 @@
1
1
  import { jsxs as s, jsx as r, Fragment as W } from "react/jsx-runtime";
2
- import { useRef as z, useEffect as j } from "react";
3
- import { useMemoizedFn as n, useCreation as T, useReactive as _ } from "ahooks";
2
+ import { useRef as z, useEffect as T } from "react";
3
+ import { useMemoizedFn as n, useCreation as _, useReactive as j } from "ahooks";
4
4
  import f from "@arcblock/bridge";
5
- import { Box as S, IconButton as H, Popper as N, ClickAwayListener as Q, Fade as V, Paper as q, Divider as k, MenuList as G, MenuItem as J } from "@mui/material";
5
+ import { Box as k, IconButton as G, Popper as H, ClickAwayListener as N, Fade as Q, Paper as V, Divider as S, MenuList as q, MenuItem as J } from "@mui/material";
6
6
  import { Icon as K } from "@iconify/react";
7
7
  import X from "@iconify-icons/material-symbols/person-outline-rounded";
8
8
  import Y from "@iconify-icons/material-symbols/filter-vintage-outline-rounded";
@@ -15,33 +15,35 @@ import te from "../../Avatar/index.js";
15
15
  import { getUserAvatar as oe } from "../../Util/index.js";
16
16
  import ie from "./user-info.js";
17
17
  import { DASHBOARD_URL as ne, PROFILE_URL as ce } from "../../Util/constant.js";
18
- import ae from "../../SessionPermission/index.js";
19
- import { translations as le } from "../libs/translation.js";
18
+ import le from "../../SessionPermission/index.js";
19
+ import { translations as ae } from "../libs/translation.js";
20
20
  import { translate as se } from "../../Locale/util.js";
21
21
  import pe from "./did-space.js";
22
22
  import { mergeSx as ue } from "../../Util/style.js";
23
23
  import { createDebug as de } from "../../Util/logger.js";
24
- const me = (e) => {
24
+ import { GA_LAST_ROLE as me } from "../../withTracker/constant/index.js";
25
+ const fe = (e) => {
25
26
  const c = new URL(window.location.href);
26
27
  return c.searchParams.set("inviter", e), c.toString();
27
28
  }, g = de("did-connect");
28
- function We({
29
+ function Te({
29
30
  session: e,
30
31
  onBindWallet: c = h,
31
- isBlocklet: a = !0,
32
+ isBlocklet: l = !0,
32
33
  locale: u = "en",
33
34
  size: b = 24,
34
35
  popperType: I = "click",
35
36
  sx: y,
36
37
  ...R
37
38
  }) {
38
- const l = n((t, o = {}) => se(le, t, u, "en", o)), C = T(() => !!globalThis?.blocklet?.settings?.invite?.enabled, []), P = z(null), d = _({
39
+ const a = n((t, o = {}) => se(ae, t, u, "en", o)), C = _(() => !!globalThis?.blocklet?.settings?.invite?.enabled, []), P = z(null), d = j({
39
40
  open: !1
40
41
  }), i = n((t = !d.open) => {
41
42
  d.open = t;
42
- }), B = I === "hover" ? { onMouseEnter: () => i(!0), onMouseLeave: () => i(!1) } : { onClick: () => i() }, D = oe(e.user?.avatar?.replace(/\s/g, encodeURIComponent(" "))), L = e.useOAuth(), O = typeof e.usePasskey == "function" ? e.usePasskey() : null, v = n(({ inArcSphere: t = !1 } = {}) => {
43
+ }), L = I === "hover" ? { onMouseEnter: () => i(!0), onMouseLeave: () => i(!1) } : { onClick: () => i() }, B = oe(e.user?.avatar?.replace(/\s/g, encodeURIComponent(" "))), D = e.useOAuth(), O = typeof e.usePasskey == "function" ? e.usePasskey() : null, v = n(({ inArcSphere: t = !1 } = {}) => {
44
+ localStorage.setItem(me, e?.user?.role);
43
45
  const o = {};
44
- t && e?.user?.sourceAppPid && (o.sourceAppPid = e.user.sourceAppPid), i(!1), e?.user?.sourceProvider === "passkey" ? O.switchPassport(e.user) : ["google", "apple", "email", "github"].includes(e?.user?.sourceProvider) ? L.switchOAuthPassport(e.user) : e.switchPassport(h, o);
46
+ t && e?.user?.sourceAppPid && (o.sourceAppPid = e.user.sourceAppPid), i(!1), e?.user?.sourceProvider === "passkey" ? O.switchPassport(e.user) : ["google", "apple", "email", "github"].includes(e?.user?.sourceProvider) ? D.switchOAuthPassport(e.user) : e.switchPassport(h, o);
45
47
  }), x = n(({ userSession: t, inArcSphere: o = !1 } = {}) => new Promise((F) => {
46
48
  const A = {};
47
49
  o && e.user.sourceAppPid && (A.sourceAppPid = e.user.sourceAppPid);
@@ -56,16 +58,16 @@ function We({
56
58
  })), w = n(({ inArcSphere: t = !1 } = {}) => {
57
59
  const o = {};
58
60
  t && e.user.sourceAppPid && (o.sourceAppPid = e.user.sourceAppPid), i(!1), e.switchProfile(h, o);
59
- }), M = n(() => {
60
- i(!1), e.logout();
61
61
  }), E = n(() => {
62
+ i(!1), e.logout();
63
+ }), M = n(() => {
62
64
  i(!1), e.bindWallet(c);
63
65
  }), U = n(() => {
64
66
  i(!1);
65
- const t = me(e.user.did);
66
- ee(t), re.success(l("inviteCopied"));
67
+ const t = fe(e.user.did);
68
+ ee(t), re.success(a("inviteCopied"));
67
69
  });
68
- return j(() => {
70
+ return T(() => {
69
71
  f.registerBlocklet("callSwitchPassport", () => {
70
72
  g("bridge registerBlocklet: callSwitchPassport"), v({ inArcSphere: !0 });
71
73
  }), f.registerBlocklet("callSwitchDid", () => {
@@ -74,7 +76,7 @@ function We({
74
76
  g("bridge registerBlocklet: callSwitchProfile"), w({ inArcSphere: !0 });
75
77
  });
76
78
  }, []), /* @__PURE__ */ s(
77
- S,
79
+ k,
78
80
  {
79
81
  sx: ue(
80
82
  {
@@ -88,19 +90,19 @@ function We({
88
90
  ...R,
89
91
  children: [
90
92
  /* @__PURE__ */ r(
91
- H,
93
+ G,
92
94
  {
93
95
  ref: P,
94
96
  size: "medium",
95
97
  "data-cy": "sessionManager-logout-popup",
96
98
  className: "arc-session-user-logged-in",
97
99
  "aria-label": "User info button",
98
- ...B,
99
- children: /* @__PURE__ */ r(te, { variant: "circle", did: e.user.did, src: D, size: b, shape: "circle" })
100
+ ...L,
101
+ children: /* @__PURE__ */ r(te, { variant: "circle", did: e.user.did, src: B, size: b, shape: "circle" })
100
102
  }
101
103
  ),
102
104
  /* @__PURE__ */ r(
103
- N,
105
+ H,
104
106
  {
105
107
  open: d.open,
106
108
  anchorEl: P.current,
@@ -110,13 +112,13 @@ function We({
110
112
  zIndex: 1600
111
113
  },
112
114
  children: ({ TransitionProps: t }) => /* @__PURE__ */ r(
113
- Q,
115
+ N,
114
116
  {
115
117
  onClickAway: (o) => {
116
118
  o.preventDefault(), o.stopPropagation(), i(!1);
117
119
  },
118
- children: /* @__PURE__ */ r(V, { ...t, timeout: 350, children: /* @__PURE__ */ s(
119
- q,
120
+ children: /* @__PURE__ */ r(Q, { ...t, timeout: 350, children: /* @__PURE__ */ s(
121
+ V,
120
122
  {
121
123
  variant: "outlined",
122
124
  sx: {
@@ -129,22 +131,22 @@ function We({
129
131
  ie,
130
132
  {
131
133
  locale: u,
132
- isBlocklet: a,
134
+ isBlocklet: l,
133
135
  session: e,
134
136
  onSwitchPassport: v,
135
137
  onSwitchAccount: x,
136
138
  onSwitchProfile: w,
137
- onBindWallet: E
139
+ onBindWallet: M
138
140
  }
139
141
  ),
140
- /* @__PURE__ */ r(k, { sx: { m: "0 !important" } }),
141
- /* @__PURE__ */ s(G, { sx: { p: 0 }, children: [
142
- a ? /* @__PURE__ */ s(W, { children: [
143
- /* @__PURE__ */ r(ae, { session: e, children: /* @__PURE__ */ r(
142
+ /* @__PURE__ */ r(S, { sx: { m: "0 !important" } }),
143
+ /* @__PURE__ */ s(q, { sx: { p: 0 }, children: [
144
+ l ? /* @__PURE__ */ s(W, { children: [
145
+ /* @__PURE__ */ r(le, { session: e, children: /* @__PURE__ */ r(
144
146
  p,
145
147
  {
146
148
  icon: Y,
147
- title: l("dashboard"),
149
+ title: a("dashboard"),
148
150
  component: "a",
149
151
  href: ne,
150
152
  sx: { display: "block", textDecoration: "none", color: "inherit" }
@@ -154,7 +156,7 @@ function We({
154
156
  p,
155
157
  {
156
158
  icon: X,
157
- title: l("profile"),
159
+ title: a("profile"),
158
160
  component: "a",
159
161
  href: ce,
160
162
  sx: { display: "block", textDecoration: "none", color: "inherit" }
@@ -164,23 +166,23 @@ function We({
164
166
  p,
165
167
  {
166
168
  icon: $,
167
- title: l("invite"),
169
+ title: a("invite"),
168
170
  component: "div",
169
171
  onClick: U,
170
172
  sx: { display: "block", color: "inherit" }
171
173
  }
172
174
  ),
173
- /* @__PURE__ */ r(k, { sx: { m: "0 !important" } }),
175
+ /* @__PURE__ */ r(S, { sx: { m: "0 !important" } }),
174
176
  /* @__PURE__ */ r(pe, { session: e, locale: u })
175
177
  ] }) : null,
176
178
  /* @__PURE__ */ r(
177
179
  p,
178
180
  {
179
181
  icon: Z,
180
- title: l("logout"),
182
+ title: a("logout"),
181
183
  component: "div",
182
184
  sx: { color: "error.main" },
183
- onClick: M,
185
+ onClick: E,
184
186
  "data-cy": "sessionManager-logout-trigger"
185
187
  }
186
188
  )
@@ -199,9 +201,9 @@ function We({
199
201
  function p({
200
202
  icon: e,
201
203
  title: c,
202
- ...a
204
+ ...l
203
205
  }) {
204
- return /* @__PURE__ */ r(S, { ...a, sx: { p: 0.5, ...a?.sx }, children: /* @__PURE__ */ s(
206
+ return /* @__PURE__ */ r(k, { ...l, sx: { p: 0.5, ...l?.sx }, children: /* @__PURE__ */ s(
205
207
  J,
206
208
  {
207
209
  sx: {
@@ -222,5 +224,5 @@ function p({
222
224
  ) });
223
225
  }
224
226
  export {
225
- We as default
227
+ Te as default
226
228
  };
@@ -1,4 +1,4 @@
1
- const e = "3.1.30", s = { "@blocklet/js-sdk": "^1.16.49-beta-20250823-082650-626c1473" }, t = {
1
+ const e = "3.1.32", s = { "@blocklet/js-sdk": "^1.16.49-beta-20250823-082650-626c1473" }, t = {
2
2
  version: e,
3
3
  dependencies: s
4
4
  };
@@ -0,0 +1,14 @@
1
+ import { LiteralUnion } from 'type-fest';
2
+ export interface BindWalletEvent {
3
+ action: 'bindWalletSuccess' | 'bindWalletFailed';
4
+ provider: LiteralUnion<'wallet' | 'apple' | 'github' | 'google' | 'email' | 'twitter' | 'passkey', string>;
5
+ }
6
+ export interface BindWalletSuccessEvent extends BindWalletEvent {
7
+ action: 'bindWalletSuccess';
8
+ success: true;
9
+ }
10
+ export interface BindWalletFailedEvent extends BindWalletEvent {
11
+ action: 'bindWalletFailed';
12
+ success: false;
13
+ errorMessage: string;
14
+ }
@@ -0,0 +1,15 @@
1
+ import { LiteralUnion } from 'type-fest';
2
+ export interface LoginEvent {
3
+ action: 'loginSuccess' | 'loginFailed';
4
+ provider: LiteralUnion<'wallet' | 'apple' | 'github' | 'google' | 'email' | 'twitter' | 'passkey', string>;
5
+ success: boolean;
6
+ }
7
+ export interface LoginSuccessEvent extends LoginEvent {
8
+ action: 'loginSuccess';
9
+ success: true;
10
+ }
11
+ export interface LoginFailedEvent extends LoginEvent {
12
+ action: 'loginFailed';
13
+ success: false;
14
+ errorMessage: string;
15
+ }
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,12 @@
1
+ export interface PayEvent {
2
+ action: 'paySuccess' | 'payFailed';
3
+ checkoutSessionMode: string;
4
+ success: boolean;
5
+ }
6
+ export interface PaySuccessEvent extends PayEvent {
7
+ success: true;
8
+ }
9
+ export interface PayFailedEvent extends PayEvent {
10
+ success: false;
11
+ errorMessage: string;
12
+ }
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,18 @@
1
+ export interface SwitchPassportEvent {
2
+ action: 'switchPassportSuccess' | 'switchPassportFailed';
3
+ success: boolean;
4
+ }
5
+ export interface SwitchPassportSuccessEvent extends SwitchPassportEvent {
6
+ success: true;
7
+ /**
8
+ *
9
+ * @example guest -> admin
10
+ * @type {string}
11
+ * @memberof SwitchPassportEvent
12
+ */
13
+ change: string;
14
+ }
15
+ export interface SwitchPassportFailedEvent extends SwitchPassportEvent {
16
+ success: false;
17
+ errorMessage: string;
18
+ }
@@ -0,0 +1,3 @@
1
+ export declare const GA_LAST_LOGIN_METHOD = "ga-last-login-method";
2
+ export declare const GA_LAST_ROLE = "ga-last-role";
3
+ export declare const GA_LAST_SOURCE_PROVIDER = "ga-last-source-provider";
@@ -0,0 +1,6 @@
1
+ const o = "ga-last-login-method", t = "ga-last-role", _ = "ga-last-source-provider";
2
+ export {
3
+ o as GA_LAST_LOGIN_METHOD,
4
+ t as GA_LAST_ROLE,
5
+ _ as GA_LAST_SOURCE_PROVIDER
6
+ };
@@ -0,0 +1 @@
1
+ export declare const googleAnalyticsMeasurementId: string;
@@ -0,0 +1,4 @@
1
+ const e = window.blocklet?.GA_MEASUREMENT_ID || "";
2
+ export {
3
+ e as googleAnalyticsMeasurementId
4
+ };
@@ -1,2 +1,4 @@
1
+ import { default as ReactGA } from 'react-ga4';
2
+ export { ReactGA };
1
3
  declare const _default: <P extends object>(WrappedComponent: React.ComponentType<P>) => (props: P) => import("react/jsx-runtime").JSX.Element;
2
4
  export default _default;
@@ -1,22 +1,26 @@
1
- import { jsx as s } from "react/jsx-runtime";
2
- import { useLocation as m } from "react-router-dom";
3
- import { useMount as f, useDeepCompareEffect as d } from "ahooks";
4
- import a from "react-ga4";
5
- const v = (i) => {
6
- const n = window.blocklet?.GA_MEASUREMENT_ID || "", r = (o, e = document.title) => {
7
- !process.env.NODE_ENV || process.env.NODE_ENV === "development" || n && a.send({ hitType: "pageview", page: o, title: e });
8
- }, c = (o, e, t, p) => {
9
- n && a.event({ category: o, action: e, label: t, value: p, transport: "beacon" });
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ import { useLocation as f } from "react-router-dom";
3
+ import { useMount as s, useDeepCompareEffect as u } from "ahooks";
4
+ import r from "react-ga4";
5
+ import { default as A } from "react-ga4";
6
+ import { googleAnalyticsMeasurementId as n } from "./env.js";
7
+ n && r.initialize(n);
8
+ const h = (i) => {
9
+ const a = (o, t = document.title) => {
10
+ n && r.send({ hitType: "pageview", page: o, title: t });
11
+ }, c = (o, t, e, m) => {
12
+ n && r.event({ category: o, action: t, label: e, value: m, transport: "beacon" });
10
13
  };
11
- return n && a.initialize(n), window.trackPage = r, window.trackEvent = c, function(e) {
12
- const t = m();
13
- return f(() => {
14
- r(t.pathname);
15
- }), d(() => {
16
- r(t.pathname);
17
- }, [t.pathname]), /* @__PURE__ */ s(i, { ...e });
14
+ return window.trackPage = a, window.trackEvent = c, function(t) {
15
+ const e = f();
16
+ return s(() => {
17
+ a(e.pathname);
18
+ }), u(() => {
19
+ a(e.pathname);
20
+ }, [e.pathname]), /* @__PURE__ */ p(i, { ...t });
18
21
  };
19
22
  };
20
23
  export {
21
- v as default
24
+ A as ReactGA,
25
+ h as default
22
26
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "3.1.30",
3
+ "version": "3.1.32",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -68,16 +68,16 @@
68
68
  "react": "^19.0.0",
69
69
  "react-router-dom": "^6.22.3"
70
70
  },
71
- "gitHead": "a51fede74e5eca679ff40a8c62d96bae09210f04",
71
+ "gitHead": "8ec0dc442d3ca3f15ca233ac096af5163963fcb0",
72
72
  "dependencies": {
73
- "@arcblock/bridge": "3.1.30",
73
+ "@arcblock/bridge": "3.1.32",
74
74
  "@arcblock/did": "^1.21.3",
75
75
  "@arcblock/did-motif": "^1.1.14",
76
- "@arcblock/icons": "3.1.30",
77
- "@arcblock/nft-display": "3.1.30",
78
- "@arcblock/react-hooks": "3.1.30",
76
+ "@arcblock/icons": "3.1.32",
77
+ "@arcblock/nft-display": "3.1.32",
78
+ "@arcblock/react-hooks": "3.1.32",
79
79
  "@blocklet/js-sdk": "^1.16.49-beta-20250823-082650-626c1473",
80
- "@blocklet/theme": "3.1.30",
80
+ "@blocklet/theme": "3.1.32",
81
81
  "@fontsource/roboto": "~5.1.1",
82
82
  "@fontsource/ubuntu-mono": "^5.2.6",
83
83
  "@iconify-icons/logos": "^1.2.36",
@@ -222,6 +222,198 @@ const translations = {
222
222
  },
223
223
  },
224
224
  },
225
+ 'zh-TW': {
226
+ groups: {
227
+ applications: '應用',
228
+ components: '組件',
229
+ computeStorage: '計算/儲存',
230
+ identity: '身份',
231
+ frameworkTools: '框架與工具',
232
+ modelsAdapters: '模型適配器',
233
+ },
234
+ products: {
235
+ nftStudio: {
236
+ description: '鑄造和管理 NFT',
237
+ },
238
+ creatorStudio: {
239
+ description: '一體化創作工具',
240
+ },
241
+ aigne: {
242
+ description: 'AI 應用的代理生態系統',
243
+ },
244
+ arcsphere: {
245
+ description: 'AI 原生瀏覽器',
246
+ },
247
+ aistro: {
248
+ description: 'AI 占星術',
249
+ },
250
+ blockletLauncher: {
251
+ description: '一鍵啟動應用程式',
252
+ },
253
+ aiKit: {
254
+ description: 'AI 賦能應用',
255
+ },
256
+ paymentKit: {
257
+ description: '便捷的加密貨幣和銀行卡支付',
258
+ },
259
+ blockletStore: {
260
+ description: '發現和部署應用程式',
261
+ },
262
+ web3Kit: {
263
+ description: 'Web3 開發工具包',
264
+ },
265
+ blockletFramework: {
266
+ description: '構建並運行 Blocklet',
267
+ },
268
+ didSpaces: {
269
+ description: '安全的個人儲存',
270
+ },
271
+ abtNetwork: {
272
+ description: '快速區塊鏈網路',
273
+ },
274
+ blockletServer: {
275
+ description: '輕鬆託管應用程式',
276
+ },
277
+ ocap: {
278
+ description: '多鏈連接器',
279
+ },
280
+ did: {
281
+ description: '自主身份',
282
+ },
283
+ didWallet: {
284
+ description: '智能數位錢包',
285
+ },
286
+ didNameService: {
287
+ description: 'Web3 域名',
288
+ },
289
+ vc: {
290
+ description: '可驗證憑證',
291
+ },
292
+ didConnect: {
293
+ description: '無密碼登入',
294
+ },
295
+ aigneCodeSmith: {
296
+ description: '使用 AI 審查並優化你的程式碼',
297
+ },
298
+ aigneDocSmith: {
299
+ description: '用 AI 生成和更新專案文件',
300
+ },
301
+ aigneWebSmith: {
302
+ description: '構建並部署 AI 驅動的 Web 應用',
303
+ },
304
+ aigneCLI: {
305
+ description: '透過命令列開發 Agent',
306
+ },
307
+ aigneObservability: {
308
+ description: '理解並分析 Agent 的行為',
309
+ },
310
+ aigneStudio: {
311
+ description: '零程式碼構建 Agent',
312
+ },
313
+ aigneFramework: {
314
+ description: 'Agent AI 的功能核心框架',
315
+ },
316
+ aigneHub: {
317
+ description: '一套 API,連接所有模型',
318
+ },
319
+ },
320
+ },
321
+ ja: {
322
+ groups: {
323
+ applications: 'アプリケーション',
324
+ components: 'コンポーネント',
325
+ computeStorage: 'コンピューティング/ストレージ',
326
+ identity: 'アイデンティティ',
327
+ frameworkTools: 'フレームワークとツール',
328
+ modelsAdapters: 'モデルアダプター',
329
+ },
330
+ products: {
331
+ nftStudio: {
332
+ description: 'NFTの作成と管理',
333
+ },
334
+ creatorStudio: {
335
+ description: 'オールインワンクリエイターツール',
336
+ },
337
+ aigne: {
338
+ description: 'AIアプリのためのエージェントエコシステム',
339
+ },
340
+ arcsphere: {
341
+ description: 'AIネイティブブラウザ',
342
+ },
343
+ aistro: {
344
+ description: 'AI駆動占星術',
345
+ },
346
+ blockletLauncher: {
347
+ description: 'ワンクリックアプリ起動',
348
+ },
349
+ aiKit: {
350
+ description: 'AIでアプリを強化',
351
+ },
352
+ paymentKit: {
353
+ description: '簡単な暗号通貨とカード決済',
354
+ },
355
+ blockletStore: {
356
+ description: 'アプリの発見とデプロイ',
357
+ },
358
+ web3Kit: {
359
+ description: 'Web3開発ツールキット',
360
+ },
361
+ blockletFramework: {
362
+ description: 'Blockletの構築と実行',
363
+ },
364
+ didSpaces: {
365
+ description: '安全な個人ストレージ',
366
+ },
367
+ abtNetwork: {
368
+ description: '高速ブロックチェーンネットワーク',
369
+ },
370
+ blockletServer: {
371
+ description: 'アプリの簡単なホスティング',
372
+ },
373
+ ocap: {
374
+ description: 'マルチチェーンコネクター',
375
+ },
376
+ did: {
377
+ description: '自己主権ID',
378
+ },
379
+ didWallet: {
380
+ description: 'スマートデジタルウォレット',
381
+ },
382
+ didNameService: {
383
+ description: 'Web3ドメイン名',
384
+ },
385
+ vc: {
386
+ description: '検証可能な認証情報',
387
+ },
388
+ didConnect: {
389
+ description: 'パスワード不要ログイン',
390
+ },
391
+ aigneCodeSmith: {
392
+ description: 'AIでコードをレビューし改善',
393
+ },
394
+ aigneDocSmith: {
395
+ description: 'AIでドキュメントを生成・更新',
396
+ },
397
+ aigneWebSmith: {
398
+ description: 'AI駆動Webアプリの構築とデプロイ',
399
+ },
400
+ aigneCLI: {
401
+ description: 'コマンドラインからエージェントを開発',
402
+ },
403
+ aigneObservability: {
404
+ description: 'エージェントの動作を理解・分析',
405
+ },
406
+ aigneStudio: {
407
+ description: 'コード不要でエージェントを視覚的に作成',
408
+ },
409
+ aigneFramework: {
410
+ description: 'エージェントAIの機能コアフレームワーク',
411
+ },
412
+ aigneHub: {
413
+ description: '1つのAPIで全てのモデルに接続',
414
+ },
415
+ },
416
+ },
225
417
  };
226
418
 
227
419
  const Wrapper = styled(Box)`
@@ -33,6 +33,7 @@ import type { Locale, Session } from '../../type';
33
33
  import DidSpace from './did-space';
34
34
  import { mergeSx } from '../../Util/style';
35
35
  import { createDebug } from '../../Util/logger';
36
+ import { GA_LAST_ROLE } from '../../withTracker/constant';
36
37
 
37
38
  const getInviteLink = (inviter: string) => {
38
39
  const url = new URL(window.location.href);
@@ -86,6 +87,7 @@ export default function LoggedIn({
86
87
  const oauth = session.useOAuth();
87
88
  const passkey = typeof session.usePasskey === 'function' ? session.usePasskey() : null;
88
89
  const handleSwitchPassport = useMemoizedFn(({ inArcSphere = false } = {}) => {
90
+ localStorage.setItem(GA_LAST_ROLE, session?.user?.role);
89
91
  const extraParams: Record<string, any> = {};
90
92
  if (inArcSphere) {
91
93
  if (session?.user?.sourceAppPid) {
@@ -0,0 +1,17 @@
1
+ import type { LiteralUnion } from 'type-fest';
2
+
3
+ export interface BindWalletEvent {
4
+ action: 'bindWalletSuccess' | 'bindWalletFailed';
5
+ provider: LiteralUnion<'wallet' | 'apple' | 'github' | 'google' | 'email' | 'twitter' | 'passkey', string>;
6
+ }
7
+
8
+ export interface BindWalletSuccessEvent extends BindWalletEvent {
9
+ action: 'bindWalletSuccess';
10
+ success: true;
11
+ }
12
+
13
+ export interface BindWalletFailedEvent extends BindWalletEvent {
14
+ action: 'bindWalletFailed';
15
+ success: false;
16
+ errorMessage: string;
17
+ }
@@ -0,0 +1,18 @@
1
+ import type { LiteralUnion } from 'type-fest';
2
+
3
+ export interface LoginEvent {
4
+ action: 'loginSuccess' | 'loginFailed';
5
+ provider: LiteralUnion<'wallet' | 'apple' | 'github' | 'google' | 'email' | 'twitter' | 'passkey', string>;
6
+ success: boolean;
7
+ }
8
+
9
+ export interface LoginSuccessEvent extends LoginEvent {
10
+ action: 'loginSuccess';
11
+ success: true;
12
+ }
13
+
14
+ export interface LoginFailedEvent extends LoginEvent {
15
+ action: 'loginFailed';
16
+ success: false;
17
+ errorMessage: string;
18
+ }