@arcblock/ux 3.0.39 → 3.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Layout/dashboard/index.d.ts +2 -0
- package/lib/Layout/dashboard/index.js +33 -32
- package/lib/NavMenu/images/aigne.svg.js +2 -4
- package/lib/NavMenu/images/aistro.png +0 -0
- package/lib/NavMenu/images/did.svg.js +2 -2
- package/lib/NavMenu/index.d.ts +1 -1
- package/lib/NavMenu/products.d.ts +3 -2
- package/lib/NavMenu/products.js +284 -147
- package/lib/NavMenu/style.js +5 -4
- package/lib/NavMenu/sub-item-group.js +7 -1
- package/lib/UserCard/index.js +9 -5
- package/package.json +7 -7
- package/src/Layout/dashboard/index.tsx +4 -1
- package/src/NavMenu/images/aigne.svg +6 -8
- package/src/NavMenu/images/aistro.png +0 -0
- package/src/NavMenu/images/did.svg +5 -3
- package/src/NavMenu/index.ts +1 -1
- package/src/NavMenu/products.tsx +429 -253
- package/src/NavMenu/style.ts +2 -1
- package/src/NavMenu/sub-item-group.tsx +7 -1
- package/src/UserCard/index.tsx +3 -3
- package/lib/NavMenu/images/ai-kit.svg.js +0 -7
- package/lib/NavMenu/images/aistro.svg.js +0 -5
- package/lib/NavMenu/images/did-connect.svg.js +0 -5
- package/lib/NavMenu/images/did-name-service.svg.js +0 -5
- package/src/NavMenu/images/aistro.svg +0 -14
- package/src/NavMenu/images/did-connect.svg +0 -26
- package/src/NavMenu/images/did-name-service.svg +0 -3
package/src/NavMenu/products.tsx
CHANGED
@@ -1,20 +1,16 @@
|
|
1
|
-
import { useRef } from 'react';
|
1
|
+
import { useRef, useEffect, useState } from 'react';
|
2
2
|
import { Link } from 'react-router-dom';
|
3
3
|
import { useCreation, useMemoizedFn } from 'ahooks';
|
4
|
-
import { Box, BoxProps,
|
4
|
+
import { Box, BoxProps, useTheme } from '@mui/material';
|
5
5
|
import SubItemGroup from './sub-item-group';
|
6
6
|
import { Item } from './nav-menu';
|
7
7
|
import { styled } from '../Theme';
|
8
8
|
import { useNavMenuContext } from './nav-menu-context';
|
9
9
|
import { translate } from '../Locale/util';
|
10
10
|
import { useLocaleContext } from '../Locale/context';
|
11
|
-
|
12
|
-
import AIKitSvg from './images/ai-kit.svg?react';
|
11
|
+
// Arcblock Icons
|
13
12
|
import NftStudioSvg from './images/nft-studio.svg?react';
|
14
13
|
import CreatorStudioSvg from './images/creator-studio.svg?react';
|
15
|
-
import AigneSvg from './images/aigne.svg?react';
|
16
|
-
import ArcSphereSvg from './images/arcsphere.svg?react';
|
17
|
-
import AistroSvg from './images/aistro.svg?react';
|
18
14
|
import BlockletLauncherSvg from './images/blocklet-launcher.svg?react';
|
19
15
|
import BlockletStoreSvg from './images/blocklet-store.svg?react';
|
20
16
|
import Web3KitSvg from './images/web3-kit.svg?react';
|
@@ -24,10 +20,14 @@ import BlockletServerSvg from './images/blocklet-server.svg?react';
|
|
24
20
|
import OCAPSvg from './images/OCAP.svg?react';
|
25
21
|
import DidSvg from './images/did.svg?react';
|
26
22
|
import DidWalletSvg from './images/did-wallet.svg?react';
|
27
|
-
import DidNameServiceSvg from './images/did-name-service.svg?react';
|
28
23
|
import VCSvg from './images/vc.svg?react';
|
29
|
-
import DidConnectSvg from './images/did-connect.svg?react';
|
30
24
|
import PaymentKitPng from './images/payment-kit.png';
|
25
|
+
// AIGNE Icons
|
26
|
+
import AigneSvg from './images/aigne.svg?react';
|
27
|
+
import ArcSphereSvg from './images/arcsphere.svg?react';
|
28
|
+
import AistroPng from './images/aistro.png';
|
29
|
+
|
30
|
+
const MIN_ITEM_CONTENT_WIDTH = 260;
|
31
31
|
|
32
32
|
const translations = {
|
33
33
|
en: {
|
@@ -36,6 +36,8 @@ const translations = {
|
|
36
36
|
components: 'Components',
|
37
37
|
computeStorage: 'Compute/Storage',
|
38
38
|
identity: 'Identity',
|
39
|
+
frameworkTools: 'Framework & tools',
|
40
|
+
modelsAdapters: 'Models adapters',
|
39
41
|
},
|
40
42
|
products: {
|
41
43
|
nftStudio: {
|
@@ -45,7 +47,7 @@ const translations = {
|
|
45
47
|
description: 'All-in-one creator tool',
|
46
48
|
},
|
47
49
|
aigne: {
|
48
|
-
description: '
|
50
|
+
description: 'The Agentic Ecosystem for AI Apps',
|
49
51
|
},
|
50
52
|
arcsphere: {
|
51
53
|
description: 'AI native browser',
|
@@ -98,6 +100,30 @@ const translations = {
|
|
98
100
|
didConnect: {
|
99
101
|
description: 'Passwordless login',
|
100
102
|
},
|
103
|
+
aigneCodeSmith: {
|
104
|
+
description: 'Review and improve your code with AI',
|
105
|
+
},
|
106
|
+
aigneDocSmith: {
|
107
|
+
description: 'Generate and update docs with AI',
|
108
|
+
},
|
109
|
+
aigneWebSmith: {
|
110
|
+
description: 'Build and deploy AI-powered web apps',
|
111
|
+
},
|
112
|
+
aigneCLI: {
|
113
|
+
description: 'Develop agents from the command line',
|
114
|
+
},
|
115
|
+
aigneObservability: {
|
116
|
+
description: 'Understand and inspect agent behavior',
|
117
|
+
},
|
118
|
+
aigneStudio: {
|
119
|
+
description: 'Create agents visually, no code needed',
|
120
|
+
},
|
121
|
+
aigneFramework: {
|
122
|
+
description: 'The functional core of agentic AI',
|
123
|
+
},
|
124
|
+
aigneHub: {
|
125
|
+
description: 'One API. Any Model',
|
126
|
+
},
|
101
127
|
},
|
102
128
|
},
|
103
129
|
zh: {
|
@@ -106,6 +132,8 @@ const translations = {
|
|
106
132
|
components: '组件',
|
107
133
|
computeStorage: '计算/存储',
|
108
134
|
identity: '身份',
|
135
|
+
frameworkTools: '框架与工具',
|
136
|
+
modelsAdapters: '模型适配器',
|
109
137
|
},
|
110
138
|
products: {
|
111
139
|
nftStudio: {
|
@@ -115,7 +143,7 @@ const translations = {
|
|
115
143
|
description: '一体化创作工具',
|
116
144
|
},
|
117
145
|
aigne: {
|
118
|
-
description: '
|
146
|
+
description: 'AI 应用的代理生态系统',
|
119
147
|
},
|
120
148
|
arcsphere: {
|
121
149
|
description: 'AI 原生浏览器',
|
@@ -168,13 +196,35 @@ const translations = {
|
|
168
196
|
didConnect: {
|
169
197
|
description: '无密码登录',
|
170
198
|
},
|
199
|
+
aigneCodeSmith: {
|
200
|
+
description: '使用 AI 审查并优化你的代码',
|
201
|
+
},
|
202
|
+
aigneDocSmith: {
|
203
|
+
description: '用 AI 生成和更新项目文档',
|
204
|
+
},
|
205
|
+
aigneWebSmith: {
|
206
|
+
description: '构建并部署 AI 驱动的 Web 应用',
|
207
|
+
},
|
208
|
+
aigneCLI: {
|
209
|
+
description: '通过命令行开发 Agent',
|
210
|
+
},
|
211
|
+
aigneObservability: {
|
212
|
+
description: '理解并分析 Agent 的行为',
|
213
|
+
},
|
214
|
+
aigneStudio: {
|
215
|
+
description: '零代码构建 Agent',
|
216
|
+
},
|
217
|
+
aigneFramework: {
|
218
|
+
description: 'Agent AI 的功能核心框架',
|
219
|
+
},
|
220
|
+
aigneHub: {
|
221
|
+
description: '一套 API,连接所有模型',
|
222
|
+
},
|
171
223
|
},
|
172
224
|
},
|
173
225
|
};
|
174
226
|
|
175
227
|
const Wrapper = styled(Box)`
|
176
|
-
width: 80vw;
|
177
|
-
max-width: 900px;
|
178
228
|
padding: 8px;
|
179
229
|
background: ${({ theme }) => theme.palette.grey[100]};
|
180
230
|
border-radius: 8px;
|
@@ -197,259 +247,385 @@ const Wrapper = styled(Box)`
|
|
197
247
|
}
|
198
248
|
`;
|
199
249
|
|
200
|
-
|
201
|
-
|
250
|
+
const GridBox = styled(Box, { shouldForwardProp: (prop) => prop !== 'maxContent' })<{ maxContent: number }>(
|
251
|
+
({ theme, maxContent }) => ({
|
252
|
+
display: 'grid',
|
253
|
+
gap: theme.spacing(1),
|
254
|
+
gridTemplateColumns: `repeat(1, ${maxContent}px)`,
|
255
|
+
|
256
|
+
[theme.breakpoints.up('md')]: {
|
257
|
+
gridTemplateColumns: `repeat(2, ${maxContent}px)`,
|
258
|
+
},
|
259
|
+
|
260
|
+
[theme.breakpoints.up('lg')]: {
|
261
|
+
gridTemplateColumns: `repeat(3, ${maxContent}px)`,
|
262
|
+
},
|
263
|
+
})
|
264
|
+
);
|
265
|
+
|
266
|
+
interface IconWrapperProps {
|
267
|
+
color?: string;
|
268
|
+
backgroundColor?: string;
|
269
|
+
children: React.ReactNode;
|
270
|
+
}
|
271
|
+
function IconWrapper({ color = 'black', backgroundColor = 'transparent', children }: IconWrapperProps) {
|
272
|
+
return (
|
273
|
+
<Box
|
274
|
+
component="span"
|
275
|
+
sx={{
|
276
|
+
display: 'inline-flex',
|
277
|
+
alignItems: 'center',
|
278
|
+
justifyContent: 'center',
|
279
|
+
color,
|
280
|
+
backgroundColor,
|
281
|
+
borderRadius: '4px',
|
282
|
+
}}>
|
283
|
+
{children}
|
284
|
+
</Box>
|
285
|
+
);
|
286
|
+
}
|
287
|
+
|
288
|
+
function DIDIcon({ color = 'black', backgroundColor = 'transparent' }: { color?: string; backgroundColor?: string }) {
|
289
|
+
return (
|
290
|
+
<IconWrapper color={color} backgroundColor={backgroundColor}>
|
291
|
+
<DidSvg style={{ width: '100%' }} />
|
292
|
+
</IconWrapper>
|
293
|
+
);
|
202
294
|
}
|
203
295
|
|
204
|
-
|
205
|
-
|
206
|
-
|
296
|
+
function AigneIcon({ color = 'black', backgroundColor = 'transparent' }: { color?: string; backgroundColor?: string }) {
|
297
|
+
return (
|
298
|
+
<IconWrapper color={color} backgroundColor={backgroundColor}>
|
299
|
+
<AigneSvg style={{ width: '100%', height: '100%' }} />
|
300
|
+
</IconWrapper>
|
301
|
+
);
|
302
|
+
}
|
303
|
+
|
304
|
+
// 智能 Link 组件,根据 URL origin 决定是否在新标签页打开
|
305
|
+
interface SmartLinkProps {
|
306
|
+
to: string;
|
307
|
+
children: React.ReactNode;
|
308
|
+
className?: string;
|
309
|
+
}
|
310
|
+
function SmartLink({ to, children, className = '' }: SmartLinkProps) {
|
311
|
+
const isExternal = () => {
|
312
|
+
try {
|
313
|
+
const url = new URL(to);
|
314
|
+
return url.origin !== window.location.origin;
|
315
|
+
} catch {
|
316
|
+
// 如果 to 不是有效的 URL,则认为是内部链接
|
317
|
+
return false;
|
318
|
+
}
|
319
|
+
};
|
320
|
+
|
321
|
+
if (isExternal()) {
|
322
|
+
return (
|
323
|
+
<Link to={to} target="_blank" rel="noreferrer noopener" className={className}>
|
324
|
+
{children}
|
325
|
+
</Link>
|
326
|
+
);
|
327
|
+
}
|
328
|
+
|
329
|
+
return (
|
330
|
+
<Link to={to} className={className}>
|
331
|
+
{children}
|
332
|
+
</Link>
|
333
|
+
);
|
334
|
+
}
|
335
|
+
|
336
|
+
export type ProductsType = 'AIGNE' | 'ARCBLOCK';
|
337
|
+
export interface ProductsProps extends BoxProps {
|
338
|
+
type: ProductsType;
|
339
|
+
}
|
340
|
+
export default function Products({ className = '', type, ...rest }: ProductsProps) {
|
207
341
|
const { mode } = useNavMenuContext();
|
208
|
-
const
|
209
|
-
const wrapperRef = useRef<HTMLDivElement>(null);
|
342
|
+
const theme = useTheme();
|
210
343
|
const { locale = 'en' } = useLocaleContext() || {};
|
344
|
+
const wrapperRef = useRef<HTMLDivElement>(null);
|
345
|
+
|
346
|
+
const { palette } = theme;
|
211
347
|
const t = useMemoizedFn((key, data = {}) => translate(translations, key, locale, 'en', data));
|
348
|
+
|
349
|
+
// 添加状态来存储最大内容宽度
|
350
|
+
const [maxContentWidth, setMaxContentWidth] = useState(MIN_ITEM_CONTENT_WIDTH);
|
351
|
+
|
352
|
+
// 计算 item 最大宽度
|
353
|
+
const calculateMaxContentWidth = useMemoizedFn(() => {
|
354
|
+
if (!wrapperRef.current) return;
|
355
|
+
|
356
|
+
const contentElements = wrapperRef.current.querySelectorAll('.navmenu-item__content');
|
357
|
+
let maxWidth = MIN_ITEM_CONTENT_WIDTH; // 默认最小宽度
|
358
|
+
|
359
|
+
contentElements.forEach((element) => {
|
360
|
+
const curWidth = element.getBoundingClientRect().width + 64; // 增加 icon 以及 padding 的宽度
|
361
|
+
if (curWidth > maxWidth) {
|
362
|
+
maxWidth = curWidth;
|
363
|
+
}
|
364
|
+
});
|
365
|
+
|
366
|
+
setMaxContentWidth(maxWidth);
|
367
|
+
});
|
368
|
+
|
369
|
+
// 监听主题、语言、类型变化时重新计算最大宽度
|
370
|
+
useEffect(() => {
|
371
|
+
calculateMaxContentWidth();
|
372
|
+
}, [theme, locale, type, calculateMaxContentWidth]);
|
373
|
+
|
374
|
+
// 监听 navmenu-item__content 元素宽度变化
|
375
|
+
useEffect(() => {
|
376
|
+
if (!wrapperRef.current) return;
|
377
|
+
|
378
|
+
const itemContent = wrapperRef.current.querySelector('.navmenu-item__content');
|
379
|
+
if (!itemContent) return;
|
380
|
+
|
381
|
+
const resizeObserver = new ResizeObserver(() => {
|
382
|
+
calculateMaxContentWidth();
|
383
|
+
});
|
384
|
+
|
385
|
+
// 监听 item 内容宽度变化(字体改变引起)
|
386
|
+
resizeObserver.observe(itemContent);
|
387
|
+
|
388
|
+
// eslint-disable-next-line consistent-return
|
389
|
+
return () => {
|
390
|
+
resizeObserver.disconnect();
|
391
|
+
};
|
392
|
+
}, [calculateMaxContentWidth]);
|
393
|
+
|
212
394
|
const groups = useCreation(() => {
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
<
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
<
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
</
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
<
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
</
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
</
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
<
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
</
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
395
|
+
if (type === 'ARCBLOCK') {
|
396
|
+
return [
|
397
|
+
{
|
398
|
+
type: 'Group',
|
399
|
+
label: t('groups.applications'),
|
400
|
+
children: [
|
401
|
+
{
|
402
|
+
label: <SmartLink to={`https://www.nftstudio.rocks/${locale}`}>NFT Studio</SmartLink>,
|
403
|
+
description: t('products.nftStudio.description'),
|
404
|
+
icon: <NftStudioSvg />,
|
405
|
+
},
|
406
|
+
{
|
407
|
+
label: (
|
408
|
+
<Link
|
409
|
+
to={`https://www.arcblock.io/content/collections/${locale}/creator-studio`}
|
410
|
+
target="_blank"
|
411
|
+
rel="noreferrer noopener">
|
412
|
+
Creator Studio
|
413
|
+
</Link>
|
414
|
+
),
|
415
|
+
description: t('products.creatorStudio.description'),
|
416
|
+
icon: <CreatorStudioSvg />,
|
417
|
+
},
|
418
|
+
{
|
419
|
+
label: <SmartLink to="https://www.aigne.io/">AIGNE</SmartLink>,
|
420
|
+
description: t('products.aigne.description'),
|
421
|
+
icon: <AigneIcon color={palette.mode === 'dark' ? 'white' : 'black'} />,
|
422
|
+
},
|
423
|
+
{
|
424
|
+
label: <SmartLink to={`https://www.arcsphere.io/${locale}`}>ArcSphere</SmartLink>,
|
425
|
+
description: t('products.arcsphere.description'),
|
426
|
+
icon: <ArcSphereSvg />,
|
427
|
+
},
|
428
|
+
],
|
429
|
+
},
|
430
|
+
{
|
431
|
+
type: 'Group',
|
432
|
+
label: t('groups.components'),
|
433
|
+
children: [
|
434
|
+
{
|
435
|
+
label: <SmartLink to={`https://launcher.arcblock.io/${locale}`}>Blocklet Launcher</SmartLink>,
|
436
|
+
description: t('products.blockletLauncher.description'),
|
437
|
+
icon: <BlockletLauncherSvg />,
|
438
|
+
},
|
439
|
+
{
|
440
|
+
label: <SmartLink to={`https://www.blocklet.io/${locale}/payment-kit`}>Payment Kit</SmartLink>,
|
441
|
+
description: t('products.paymentKit.description'),
|
442
|
+
icon: <img src={PaymentKitPng} alt="Payment Kit" />,
|
443
|
+
},
|
444
|
+
{
|
445
|
+
label: <SmartLink to={`https://store.blocklet.dev/?locale=${locale}`}>Blocklet Store</SmartLink>,
|
446
|
+
description: t('products.blockletStore.description'),
|
447
|
+
icon: <BlockletStoreSvg />,
|
448
|
+
},
|
449
|
+
{
|
450
|
+
label: <SmartLink to={`https://www.web3kit.rocks/${locale}`}>Web3 Kit</SmartLink>,
|
451
|
+
description: t('products.web3Kit.description'),
|
452
|
+
icon: <Web3KitSvg />,
|
453
|
+
},
|
454
|
+
],
|
455
|
+
},
|
456
|
+
{
|
457
|
+
type: 'Group',
|
458
|
+
label: t('groups.computeStorage'),
|
459
|
+
children: [
|
460
|
+
{
|
461
|
+
label: (
|
462
|
+
<Link
|
463
|
+
to={`https://www.arcblock.io/content/collections/${locale}/blocklet`}
|
464
|
+
target="_blank"
|
465
|
+
rel="noreferrer noopener">
|
466
|
+
Blocklet Framework
|
467
|
+
</Link>
|
468
|
+
),
|
469
|
+
description: t('products.blockletFramework.description'),
|
470
|
+
icon: <BlockletFrameworkSvg />,
|
471
|
+
},
|
472
|
+
{
|
473
|
+
label: (
|
474
|
+
<Link to={`https://www.didspaces.com/${locale}`} target="_blank" rel="noreferrer noopener">
|
475
|
+
DID Spaces
|
476
|
+
</Link>
|
477
|
+
),
|
478
|
+
description: t('products.didSpaces.description'),
|
479
|
+
icon: <DIDIcon color="#876bf4" />,
|
480
|
+
},
|
481
|
+
{
|
482
|
+
label: (
|
483
|
+
<Link to="https://main.abtnetwork.io/" target="_blank" rel="noreferrer noopener">
|
484
|
+
ABT Network
|
485
|
+
</Link>
|
486
|
+
),
|
487
|
+
description: t('products.abtNetwork.description'),
|
488
|
+
icon: <AbtNetworkSvg />,
|
489
|
+
},
|
490
|
+
{
|
491
|
+
label: <SmartLink to={`https://www.blocklet.io/${locale}/blocklet-server`}>Blocklet Server</SmartLink>,
|
492
|
+
description: t('products.blockletServer.description'),
|
493
|
+
icon: <BlockletServerSvg />,
|
494
|
+
},
|
495
|
+
{
|
496
|
+
label: <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/ocap`}>ОСАР</SmartLink>,
|
497
|
+
description: t('products.ocap.description'),
|
498
|
+
icon: <OCAPSvg />,
|
499
|
+
},
|
500
|
+
],
|
501
|
+
},
|
502
|
+
{
|
503
|
+
type: 'Group',
|
504
|
+
label: t('groups.identity'),
|
505
|
+
children: [
|
506
|
+
{
|
507
|
+
label: <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/did`}>DID</SmartLink>,
|
508
|
+
description: t('products.did.description'),
|
509
|
+
icon: <DIDIcon color="#5b96f3" />,
|
510
|
+
},
|
511
|
+
{
|
512
|
+
label: <SmartLink to={`https://www.didwallet.io/${locale}`}>DID Wallet</SmartLink>,
|
513
|
+
description: t('products.didWallet.description'),
|
514
|
+
icon: <DidWalletSvg />,
|
515
|
+
},
|
516
|
+
{
|
517
|
+
label: (
|
518
|
+
<Link to={`https://www.didnames.io/${locale}`} target="_blank" rel="noreferrer noopener">
|
519
|
+
DID Names
|
520
|
+
</Link>
|
521
|
+
),
|
522
|
+
description: t('products.didNameService.description'),
|
523
|
+
icon: <DIDIcon color="#678ab0" />,
|
524
|
+
},
|
525
|
+
{
|
526
|
+
label: (
|
527
|
+
<SmartLink to={`https://www.arcblock.io/content/collections/${locale}/verifiable-credential`}>
|
528
|
+
VC
|
529
|
+
</SmartLink>
|
530
|
+
),
|
531
|
+
description: t('products.vc.description'),
|
532
|
+
icon: <VCSvg />,
|
533
|
+
},
|
534
|
+
{
|
535
|
+
label: <SmartLink to={`https://www.didconnect.io/${locale}`}>DID Connect</SmartLink>,
|
536
|
+
description: t('products.didConnect.description'),
|
537
|
+
icon: <DIDIcon color="#5bbec5" />,
|
538
|
+
},
|
539
|
+
],
|
540
|
+
},
|
541
|
+
];
|
542
|
+
}
|
543
|
+
|
544
|
+
if (type === 'AIGNE') {
|
545
|
+
return [
|
546
|
+
{
|
547
|
+
type: 'Group',
|
548
|
+
label: t('groups.applications'),
|
549
|
+
children: [
|
550
|
+
{
|
551
|
+
label: <SmartLink to={`https://www.arcsphere.io/${locale}`}>ArcSphere</SmartLink>,
|
552
|
+
description: t('products.arcsphere.description'),
|
553
|
+
icon: <ArcSphereSvg />,
|
554
|
+
},
|
555
|
+
{
|
556
|
+
label: <SmartLink to={`https://www.aistro.io/${locale}`}>Aistro</SmartLink>,
|
557
|
+
description: t('products.aistro.description'),
|
558
|
+
icon: <img src={AistroPng} alt="Aistro" />,
|
559
|
+
},
|
560
|
+
{
|
561
|
+
label: <SmartLink to="https://www.aigne.io/doc-smith">AIGNE CodeSmith</SmartLink>,
|
562
|
+
description: t('products.aigneCodeSmith.description'),
|
563
|
+
icon: <AigneIcon color="#56a596" backgroundColor="#e9fcf6" />,
|
564
|
+
},
|
565
|
+
{
|
566
|
+
label: <SmartLink to="https://www.aigne.io/code-smith">AIGNE DocSmith</SmartLink>,
|
567
|
+
description: t('products.aigneDocSmith.description'),
|
568
|
+
icon: <AigneIcon color="#e46f38" backgroundColor="#f7e0d7" />,
|
569
|
+
},
|
570
|
+
{
|
571
|
+
label: <SmartLink to="https://www.aigne.io/web-smith">AIGNE WebSmith</SmartLink>,
|
572
|
+
description: t('products.aigneWebSmith.description'),
|
573
|
+
icon: <AigneIcon color="#7c45eb" backgroundColor="#f0e9ff" />,
|
574
|
+
},
|
575
|
+
],
|
576
|
+
},
|
577
|
+
{
|
578
|
+
type: 'Group',
|
579
|
+
label: t('groups.frameworkTools'),
|
580
|
+
children: [
|
581
|
+
{
|
582
|
+
label: <SmartLink to="https://www.aigne.io/cli">AIGNE CLI</SmartLink>,
|
583
|
+
description: t('products.aigneCLI.description'),
|
584
|
+
icon: <AigneIcon color="#d05d4e" backgroundColor="#faeaea" />,
|
585
|
+
},
|
586
|
+
{
|
587
|
+
label: <SmartLink to="https://www.aigne.io/observability">AIGNE Observability</SmartLink>,
|
588
|
+
description: t('products.aigneObservability.description'),
|
589
|
+
icon: <AigneIcon color="#6ba456" backgroundColor="#edfae8" />,
|
590
|
+
},
|
591
|
+
{
|
592
|
+
label: <SmartLink to="https://www.aigne.io/studio">AIGNE Studio</SmartLink>,
|
593
|
+
description: t('products.aigneStudio.description'),
|
594
|
+
icon: <AigneIcon color="#676cbf" backgroundColor="#edeeff" />,
|
595
|
+
},
|
596
|
+
{
|
597
|
+
label: <SmartLink to="https://www.aigne.io/framework">AIGNE Framework</SmartLink>,
|
598
|
+
description: t('products.aigneFramework.description'),
|
599
|
+
icon: <AigneIcon color="#5086d0" backgroundColor="#eef4ff" />,
|
600
|
+
},
|
601
|
+
],
|
602
|
+
},
|
603
|
+
{
|
604
|
+
type: 'Group',
|
605
|
+
label: t('groups.modelsAdapters'),
|
606
|
+
children: [
|
607
|
+
{
|
608
|
+
label: <SmartLink to="https://www.aigne.io/hub">AIGNE Hub</SmartLink>,
|
609
|
+
description: t('products.aigneHub.description'),
|
610
|
+
icon: <AigneIcon color="#e4930b" backgroundColor="#fbf4d4" />,
|
611
|
+
},
|
612
|
+
],
|
613
|
+
},
|
614
|
+
];
|
615
|
+
}
|
616
|
+
|
617
|
+
return [];
|
434
618
|
}, [t, locale, palette]);
|
435
619
|
|
436
620
|
return (
|
437
|
-
<Wrapper ref={wrapperRef} className={`is-${mode} ${className}`} {...rest}>
|
621
|
+
<Wrapper ref={wrapperRef} className={`nav-menu-products is-${mode} ${className}`} {...rest}>
|
438
622
|
{groups.map((group) => (
|
439
623
|
<SubItemGroup key={group.label} label={group.label}>
|
440
|
-
<
|
624
|
+
<GridBox maxContent={maxContentWidth}>
|
441
625
|
{group.children.map((item) => (
|
442
|
-
<
|
443
|
-
key={item.description}
|
444
|
-
size={{
|
445
|
-
xs: 12,
|
446
|
-
md: 6,
|
447
|
-
lg: 4,
|
448
|
-
}}>
|
449
|
-
<Item variant="panel" style={{ padding: '8px' }} {...item} />
|
450
|
-
</Grid>
|
626
|
+
<Item variant="panel" style={{ padding: '8px' }} {...item} />
|
451
627
|
))}
|
452
|
-
</
|
628
|
+
</GridBox>
|
453
629
|
</SubItemGroup>
|
454
630
|
))}
|
455
631
|
</Wrapper>
|