@microcosmmoney/portal-react 3.2.2 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/dashboard/assets-summary.js +1 -1
- package/dist/components/dashboard/mining-weight.js +5 -16
- package/dist/components/menu-section.d.ts +3 -2
- package/dist/components/menu-section.js +4 -4
- package/dist/components/mining/mining-page.js +1 -1
- package/dist/components/organization/organization-page.js +11 -13
- package/dist/menu-config.js +22 -11
- package/package.json +3 -3
|
@@ -6,7 +6,7 @@ exports.MicrocosmAssetsSummary = MicrocosmAssetsSummary;
|
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const auth_react_1 = require("@microcosmmoney/auth-react");
|
|
8
8
|
const RANK_COLOR = {
|
|
9
|
-
|
|
9
|
+
miner: 'text-cyan-300',
|
|
10
10
|
commander: 'text-white', pioneer: 'text-cyan-400', warden: 'text-cyan-300', admiral: 'text-cyan-300',
|
|
11
11
|
};
|
|
12
12
|
function MicrocosmAssetsSummary({ basePath = '', onNavigate, accentColor }) {
|
|
@@ -5,10 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
5
5
|
exports.MicrocosmMiningWeight = MicrocosmMiningWeight;
|
|
6
6
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
7
|
const auth_react_1 = require("@microcosmmoney/auth-react");
|
|
8
|
-
const auth_core_1 = require("@microcosmmoney/auth-core");
|
|
9
8
|
const RANK_LABELS = {
|
|
10
|
-
Recruit: 'Recruit \u65b0\u5175',
|
|
11
|
-
Prospect: 'Prospect \u63a2\u77ff\u8005',
|
|
12
9
|
Miner: 'Miner \u77ff\u5de5',
|
|
13
10
|
Commander: 'Commander \u6307\u6325\u5b98',
|
|
14
11
|
Pioneer: 'Pioneer \u5148\u9a71',
|
|
@@ -16,8 +13,6 @@ const RANK_LABELS = {
|
|
|
16
13
|
Admiral: 'Admiral \u5143\u5e05',
|
|
17
14
|
};
|
|
18
15
|
const RANK_COLORS = {
|
|
19
|
-
Recruit: 'text-neutral-500',
|
|
20
|
-
Prospect: 'text-neutral-400',
|
|
21
16
|
Miner: 'text-cyan-300',
|
|
22
17
|
Commander: 'text-white',
|
|
23
18
|
Pioneer: 'text-cyan-400',
|
|
@@ -32,30 +27,24 @@ const IconPickaxe = ({ stroke = '#22d3ee' }) => ((0, jsx_runtime_1.jsxs)("svg",
|
|
|
32
27
|
function getCompanionYield(rank) {
|
|
33
28
|
if (!rank)
|
|
34
29
|
return [];
|
|
35
|
-
if (rank === auth_core_1.UserRank.RECRUIT || rank === auth_core_1.UserRank.PROSPECT) {
|
|
36
|
-
return [
|
|
37
|
-
{ label: '\u56e2\u961f', share: '100%', type: 'MCC' },
|
|
38
|
-
];
|
|
39
|
-
}
|
|
40
30
|
return [
|
|
41
|
-
{ label: '\
|
|
42
|
-
{ label: '\
|
|
31
|
+
{ label: '\u653f\u52a1\u5b98', share: '40%', type: 'MCC' },
|
|
32
|
+
{ label: 'LP \u6d41\u52a8\u6027', share: '30%', type: 'MCC' },
|
|
43
33
|
{ label: '\u9886\u5730\u91d1\u5e93', share: '30%', type: 'MCD' },
|
|
44
34
|
];
|
|
45
35
|
}
|
|
46
36
|
function MicrocosmMiningWeight({ accentColor } = {}) {
|
|
47
37
|
const { data, loading: loadingLevel } = (0, auth_react_1.useUserLevel)();
|
|
48
|
-
const { data: techBonus, loading: loadingTech } = (0, auth_react_1.
|
|
38
|
+
const { data: techBonus, loading: loadingTech } = (0, auth_react_1.useTechBonusDetail)();
|
|
49
39
|
const { data: miningStats, loading: loadingMining } = (0, auth_react_1.useMiningStats)();
|
|
50
40
|
const loading = loadingLevel || loadingTech || loadingMining;
|
|
51
41
|
const ac = accentColor || '#22d3ee';
|
|
52
42
|
const rank = data?.level ?? null;
|
|
53
43
|
const miningDays = data?.upgrade_progress?.current_days ?? miningStats?.active_days_30d ?? 0;
|
|
54
44
|
const companionYield = getCompanionYield(rank);
|
|
55
|
-
// Tech tree discount
|
|
56
45
|
const bonusMultiplier = techBonus?.bonus_multiplier ?? 0;
|
|
57
|
-
const discountPct = bonusMultiplier > 0 ?
|
|
46
|
+
const discountPct = bonusMultiplier > 0 ? `+${(bonusMultiplier * 100).toFixed(0)}%` : '0%';
|
|
58
47
|
const spinnerBorderColor = accentColor ? { borderColor: accentColor, borderTopColor: 'transparent' } : undefined;
|
|
59
48
|
const spinnerClass = accentColor ? 'inline-block w-5 h-5 border-2 rounded-full animate-spin' : 'inline-block w-5 h-5 border-2 border-cyan-400 border-t-transparent rounded-full animate-spin';
|
|
60
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg h-full hover:border-cyan-400/50 transition-colors", children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 mb-4", children: [(0, jsx_runtime_1.jsx)(IconPickaxe, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "MINING_WEIGHT" })] }), loading ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center py-12", children: (0, jsx_runtime_1.jsx)("span", { className: spinnerClass, style: spinnerBorderColor }) })) : ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-3 gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [(0, jsx_runtime_1.jsx)(IconShield, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "level" })] }), (0, jsx_runtime_1.jsx)("div", { className: `text-sm font-bold font-mono ${accentColor ? '' : (RANK_COLORS[rank ?? ''] ?? 'text-neutral-500')}`, style: accentColor ? { color: accentColor } : undefined, children: rank ? RANK_LABELS[rank] ?? rank : 'N/A' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [(0, jsx_runtime_1.jsx)(IconTree, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "
|
|
49
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg h-full hover:border-cyan-400/50 transition-colors", children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 mb-4", children: [(0, jsx_runtime_1.jsx)(IconPickaxe, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "MINING_WEIGHT" })] }), loading ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center py-12", children: (0, jsx_runtime_1.jsx)("span", { className: spinnerClass, style: spinnerBorderColor }) })) : ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-3 gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [(0, jsx_runtime_1.jsx)(IconShield, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "level" })] }), (0, jsx_runtime_1.jsx)("div", { className: `text-sm font-bold font-mono ${accentColor ? '' : (RANK_COLORS[rank ?? ''] ?? 'text-neutral-500')}`, style: accentColor ? { color: accentColor } : undefined, children: rank ? RANK_LABELS[rank] ?? rank : 'N/A' })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [(0, jsx_runtime_1.jsx)(IconTree, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "tech_bonus" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold font-mono text-white", children: discountPct }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono", children: "output boost" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [(0, jsx_runtime_1.jsx)(IconCalendar, { stroke: ac }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-xs font-mono tracking-wider", children: "mining_days" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold font-mono text-white", children: miningDays }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono", children: "cumulative" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-neutral-400 text-xs font-mono tracking-wider mb-3", children: "companion_yield" }), (0, jsx_runtime_1.jsx)("p", { className: "text-[10px] text-neutral-500 font-mono mb-3", children: "Each mining produces companion yield, auto-injected into territory ecosystem" }), (0, jsx_runtime_1.jsx)("div", { className: "space-y-2", children: companionYield.map((row) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-2 py-1.5 bg-neutral-900 rounded hover:bg-neutral-700 transition-colors", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs font-mono text-neutral-300", children: row.label }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs font-mono font-bold text-white", children: row.share }), (0, jsx_runtime_1.jsx)("span", { className: accentColor ? 'text-[10px] font-mono px-1.5 py-0.5 rounded' : 'text-[10px] font-mono px-1.5 py-0.5 rounded bg-cyan-400/20 text-cyan-400', style: accentColor ? { backgroundColor: `${accentColor}33`, color: accentColor } : undefined, children: row.type })] })] }, row.label))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-[10px] text-neutral-500 font-mono space-y-1", children: [(0, jsx_runtime_1.jsxs)("div", { children: ['\u6316\u77ff\u4ef7\u683c', " = ", '\u57fa\u51c6\u4ef7\u683c', " x 4 (", '\u7528\u6237\u83b7\u5f97', " 100% MCC)"] }), (0, jsx_runtime_1.jsxs)("div", { children: ['\u4f34\u751f\u77ff\u4e0e\u7528\u6237\u6316\u77ff\u91cf', " 1:1 ", '\u540c\u6b65\u4ea7\u51fa'] })] })] }))] }) }));
|
|
61
50
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type MicrocosmMenuGroup, type MicrocosmMenuItem } from '../menu-config';
|
|
2
|
+
import { type MicrocosmMenuGroup, type MicrocosmMenuItem, type MenuLocale } from '../menu-config';
|
|
3
3
|
export interface MicrocosmMenuSectionProps {
|
|
4
4
|
basePath?: string;
|
|
5
5
|
currentPath?: string;
|
|
6
|
+
locale?: MenuLocale;
|
|
6
7
|
onNavigate?: (path: string) => void;
|
|
7
8
|
onItemClick?: (item: MicrocosmMenuItem, resolvedPath: string) => void;
|
|
8
9
|
groups?: MicrocosmMenuGroup[];
|
|
@@ -13,4 +14,4 @@ export interface MicrocosmMenuSectionProps {
|
|
|
13
14
|
renderItem?: (item: MicrocosmMenuItem, resolvedPath: string, isActive: boolean) => React.ReactNode;
|
|
14
15
|
renderSectionHeader?: (group: MicrocosmMenuGroup) => React.ReactNode;
|
|
15
16
|
}
|
|
16
|
-
export declare function MicrocosmMenuSection({ basePath, currentPath, onNavigate, onItemClick, groups, className, filterItems, extraItems, extraItemsPosition, renderItem, renderSectionHeader, }: MicrocosmMenuSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare function MicrocosmMenuSection({ basePath, currentPath, locale, onNavigate, onItemClick, groups, className, filterItems, extraItems, extraItemsPosition, renderItem, renderSectionHeader, }: MicrocosmMenuSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -15,7 +15,7 @@ function isActive(itemPath, currentPath) {
|
|
|
15
15
|
return currentPath === '/';
|
|
16
16
|
return currentPath.startsWith(itemPath);
|
|
17
17
|
}
|
|
18
|
-
function MicrocosmMenuSection({ basePath, currentPath, onNavigate, onItemClick, groups = menu_config_1.microcosmMenuGroups, className = '', filterItems, extraItems, extraItemsPosition = 'bottom', renderItem, renderSectionHeader, }) {
|
|
18
|
+
function MicrocosmMenuSection({ basePath, currentPath, locale, onNavigate, onItemClick, groups = menu_config_1.microcosmMenuGroups, className = '', filterItems, extraItems, extraItemsPosition = 'bottom', renderItem, renderSectionHeader, }) {
|
|
19
19
|
const renderMenuItem = (item) => {
|
|
20
20
|
const resolved = (0, menu_config_1.resolveMenuPath)(item.path, basePath);
|
|
21
21
|
const active = isActive(resolved, currentPath);
|
|
@@ -25,7 +25,7 @@ function MicrocosmMenuSection({ basePath, currentPath, onNavigate, onItemClick,
|
|
|
25
25
|
return ((0, jsx_runtime_1.jsxs)("button", { onClick: () => {
|
|
26
26
|
onItemClick?.(item, resolved);
|
|
27
27
|
onNavigate?.(resolved);
|
|
28
|
-
}, title: item
|
|
28
|
+
}, title: (0, menu_config_1.getMenuDescription)(item, locale), style: {
|
|
29
29
|
display: 'flex',
|
|
30
30
|
alignItems: 'center',
|
|
31
31
|
gap: '8px',
|
|
@@ -50,7 +50,7 @@ function MicrocosmMenuSection({ basePath, currentPath, onNavigate, onItemClick,
|
|
|
50
50
|
e.currentTarget.style.background = 'transparent';
|
|
51
51
|
e.currentTarget.style.color = 'rgba(255,255,255,0.7)';
|
|
52
52
|
}
|
|
53
|
-
}, children: [(0, jsx_runtime_1.jsx)(item.icon, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { style: { flex: 1 }, children: item
|
|
53
|
+
}, children: [(0, jsx_runtime_1.jsx)(item.icon, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { style: { flex: 1 }, children: (0, menu_config_1.getMenuTitle)(item, locale) }), item.badge && ((0, jsx_runtime_1.jsx)("span", { style: {
|
|
54
54
|
fontSize: '10px',
|
|
55
55
|
padding: '1px 6px',
|
|
56
56
|
borderRadius: '9999px',
|
|
@@ -74,6 +74,6 @@ function MicrocosmMenuSection({ basePath, currentPath, onNavigate, onItemClick,
|
|
|
74
74
|
letterSpacing: '0.05em',
|
|
75
75
|
opacity: 0.5,
|
|
76
76
|
fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',
|
|
77
|
-
}, children: [(0, jsx_runtime_1.jsx)(group.icon, { size: 14 }), (0, jsx_runtime_1.jsx)("span", { children: group
|
|
77
|
+
}, children: [(0, jsx_runtime_1.jsx)(group.icon, { size: 14 }), (0, jsx_runtime_1.jsx)("span", { children: (0, menu_config_1.getMenuTitle)(group, locale) })] })), items.map(renderMenuItem)] }, group.key));
|
|
78
78
|
}), extraItemsPosition === 'bottom' && extraElements] }));
|
|
79
79
|
}
|
|
@@ -74,7 +74,7 @@ function MicrocosmMiningPage({ basePath = '', onNavigate }) {
|
|
|
74
74
|
}
|
|
75
75
|
return ((0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto p-6 space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-2xl font-bold text-white tracking-wider", children: "Mining" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400 mt-1", children: "MCC minting via X402 protocol" })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => refreshRecords(), className: "inline-flex items-center gap-2 px-3 py-1.5 text-sm border border-neutral-700 text-neutral-400 hover:bg-neutral-800 hover:text-neutral-300 bg-transparent rounded-md transition-colors", children: [(0, jsx_runtime_1.jsx)(IconRefresh, { className: mccStatsLoading ? 'animate-spin' : '' }), "Refresh"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col md:flex-row md:items-center md:justify-between gap-6 mb-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "space-y-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs bg-white/20 text-white px-2 py-0.5 rounded font-medium", children: "X402 Protocol" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs bg-cyan-400/20 text-cyan-400 px-2 py-0.5 rounded font-medium", children: "Solana Mainnet" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1", children: "MINING_PRICE" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-baseline gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-3xl font-bold text-cyan-400 font-mono", children: ["1 MCC = ", miningPrice > 0 ? fmt(miningPrice, 4) : '--', " USD"] }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs bg-cyan-400/20 text-cyan-400 px-1.5 py-0.5 rounded", children: "market x 2" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-start gap-4 text-xs text-neutral-500", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5", children: [(0, jsx_runtime_1.jsx)(IconShield, { className: "w-3.5 h-3.5 text-neutral-500 flex-shrink-0" }), (0, jsx_runtime_1.jsx)("span", { children: "Stablecoin direct payment" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5", children: [(0, jsx_runtime_1.jsx)(IconZap, { className: "w-3.5 h-3.5 text-neutral-500 flex-shrink-0" }), (0, jsx_runtime_1.jsx)("span", { children: "Instant on-chain minting" })] })] })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: handleMine, disabled: miningLoading || !primaryAddress, className: "inline-flex items-center justify-center gap-2 px-8 py-4 text-base font-medium bg-cyan-700 hover:bg-cyan-600 text-white rounded-md whitespace-nowrap flex-shrink-0 disabled:opacity-50 transition-colors", children: [(0, jsx_runtime_1.jsx)(IconZap, { className: "w-5 h-5" }), miningLoading ? 'Processing...' : 'Start Minting'] })] }), (0, jsx_runtime_1.jsx)("div", { className: "border-t border-neutral-700 pt-4 mb-4", children: (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider uppercase mb-3", children: "MINING STATISTICS" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4 mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, jsx_runtime_1.jsx)(IconTrendingUp, {}), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "phase" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-2xl font-bold text-white font-mono", children: ["Phase ", currentPhase] }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500 mt-1", children: "Halving every 100M" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, jsx_runtime_1.jsx)(IconCoins, {}), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "total_minted" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-2xl font-bold text-white font-mono", children: fmt(totalMinted) }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500 mt-1", children: "MCC minted to date" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-2 mb-2", children: (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "mining_rate" }) }), (0, jsx_runtime_1.jsx)("div", { className: "text-2xl font-bold text-cyan-400 font-mono", children: miningRate > 0 ? `${miningRate}:1` : '--' }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500 mt-1", children: "USD to MCC ratio" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-2 mb-2", children: (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "next_halving" }) }), (0, jsx_runtime_1.jsx)("div", { className: "text-2xl font-bold text-white font-mono", children: nextHalving > totalMinted ? fmt(nextHalving - totalMinted, 0) : 'N/A' }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500 mt-1", children: "MCC until next halving" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-1", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center text-xs font-mono", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-neutral-500", children: ["Remaining: ", fmt(100000000 - (totalMinted % 100000000), 0), " MCC until next halving"] }), (0, jsx_runtime_1.jsxs)("span", { className: "text-white", children: [((totalMinted % 100000000) / 100000000 * 100).toFixed(1), "%"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "bg-neutral-800 rounded-full h-2 overflow-hidden", children: (0, jsx_runtime_1.jsx)("div", { className: "h-2 rounded-full bg-cyan-400 transition-all", style: { width: `${((totalMinted % 100000000) / 100000000) * 100}%` } }) })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-between mb-3", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconWallet, { className: "text-white" }), (0, jsx_runtime_1.jsx)("span", { className: "text-sm text-neutral-300 tracking-wider font-medium", children: "On-Chain Balance" }), walletList.length > 0 && ((0, jsx_runtime_1.jsxs)("span", { className: "inline-flex items-center gap-1 text-xs bg-white/20 text-white px-1.5 py-0.5 rounded", children: [(0, jsx_runtime_1.jsx)(IconCheckCircle, {}), walletList.length, " wallet", walletList.length !== 1 ? 's' : ''] }))] }) }), (0, jsx_runtime_1.jsx)("p", { className: "text-neutral-500 text-xs mb-4", children: "Real-time on-chain MCC balance across all bound wallets" }), walletsLoading && walletList.length === 0 ? ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center py-8", children: [(0, jsx_runtime_1.jsx)(Spinner, { className: "mr-2" }), (0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400 text-sm", children: "Loading on-chain balance..." })] })) : walletList.length === 0 ? (
|
|
76
76
|
/* Fallback: show aggregate balance from useMCC */
|
|
77
|
-
(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1 font-mono", children: "total_balance" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-2xl font-bold font-mono text-white", children: [fmt(mccBalance, 3), " MCC"] }), primaryAddress && ((0, jsx_runtime_1.jsxs)("div", { className: "text-neutral-500 text-xs mt-1 font-mono", children: [primaryAddress.slice(0, 8), "...", primaryAddress.slice(-4)] }))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1 font-mono", children: "total_on_chain" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-2xl font-bold font-mono text-white", children: [fmt(totalBalance), " MCC"] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-neutral-500 text-xs mt-1", children: [walletList.length, " wallet", walletList.length !== 1 ? 's' : '', " total"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1 font-mono", children: "primary_wallet" }), (0, jsx_runtime_1.jsx)("div", { className: "text-2xl font-bold font-mono text-white", children: primaryWallet ? fmt(primaryWallet.mcc_balance ?? 0) : '--' }), (0, jsx_runtime_1.jsx)("div", { className: "text-neutral-500 text-xs mt-1 truncate font-mono", children: primaryAddress ? `${primaryAddress.slice(0, 6)}...${primaryAddress.slice(-4)}` : 'No primary wallet' })] })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => setWalletsExpanded(!walletsExpanded), className: "flex items-center gap-2 text-xs text-neutral-400 hover:text-cyan-400 transition-colors mb-2", children: [walletsExpanded ? (0, jsx_runtime_1.jsx)(IconChevronUp, {}) : (0, jsx_runtime_1.jsx)(IconChevronDown, {}), walletsExpanded ? 'Collapse' : 'Expand', " (", walletList.length, ")"] }), walletsExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "space-y-2", children: walletList.map((w) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-3 p-2 bg-neutral-800 rounded hover:bg-neutral-700 text-xs transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 min-w-0", children: [(0, jsx_runtime_1.jsx)(IconWallet, { className: "w-3 h-3 text-neutral-500 flex-shrink-0" }), (0, jsx_runtime_1.jsxs)("a", { href: `https://
|
|
77
|
+
(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1 font-mono", children: "total_balance" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-2xl font-bold font-mono text-white", children: [fmt(mccBalance, 3), " MCC"] }), primaryAddress && ((0, jsx_runtime_1.jsxs)("div", { className: "text-neutral-500 text-xs mt-1 font-mono", children: [primaryAddress.slice(0, 8), "...", primaryAddress.slice(-4)] }))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1 font-mono", children: "total_on_chain" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-2xl font-bold font-mono text-white", children: [fmt(totalBalance), " MCC"] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-neutral-500 text-xs mt-1", children: [walletList.length, " wallet", walletList.length !== 1 ? 's' : '', " total"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider mb-1 font-mono", children: "primary_wallet" }), (0, jsx_runtime_1.jsx)("div", { className: "text-2xl font-bold font-mono text-white", children: primaryWallet ? fmt(primaryWallet.mcc_balance ?? 0) : '--' }), (0, jsx_runtime_1.jsx)("div", { className: "text-neutral-500 text-xs mt-1 truncate font-mono", children: primaryAddress ? `${primaryAddress.slice(0, 6)}...${primaryAddress.slice(-4)}` : 'No primary wallet' })] })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => setWalletsExpanded(!walletsExpanded), className: "flex items-center gap-2 text-xs text-neutral-400 hover:text-cyan-400 transition-colors mb-2", children: [walletsExpanded ? (0, jsx_runtime_1.jsx)(IconChevronUp, {}) : (0, jsx_runtime_1.jsx)(IconChevronDown, {}), walletsExpanded ? 'Collapse' : 'Expand', " (", walletList.length, ")"] }), walletsExpanded && ((0, jsx_runtime_1.jsx)("div", { className: "space-y-2", children: walletList.map((w) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between px-3 p-2 bg-neutral-800 rounded hover:bg-neutral-700 text-xs transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 min-w-0", children: [(0, jsx_runtime_1.jsx)(IconWallet, { className: "w-3 h-3 text-neutral-500 flex-shrink-0" }), (0, jsx_runtime_1.jsxs)("a", { href: `https://solscan.io/account/${w.wallet_address}`, target: "_blank", rel: "noopener noreferrer", className: "text-neutral-300 hover:text-white truncate font-mono", children: [w.wallet_address.slice(0, 8), "...", w.wallet_address.slice(-6)] }), w.is_primary && ((0, jsx_runtime_1.jsx)("span", { className: "px-1.5 py-0.5 bg-cyan-400/20 text-cyan-400 rounded text-[10px] flex-shrink-0", children: "Primary" }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 flex-shrink-0 ml-4", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-white font-mono font-medium", children: [fmt(w.mcc_balance ?? 0), " MCC"] }), (0, jsx_runtime_1.jsx)("a", { href: `https://solscan.io/account/${w.wallet_address}`, target: "_blank", rel: "noopener noreferrer", className: "text-neutral-600 hover:text-neutral-400", children: (0, jsx_runtime_1.jsx)(IconExternalLink, {}) })] })] }, w.wallet_address))) }))] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg hover:border-cyan-400/50 transition-colors", children: (0, jsx_runtime_1.jsxs)("div", { className: "p-6", children: [(0, jsx_runtime_1.jsxs)("button", { onClick: () => setShowRecords(!showRecords), className: "w-full flex items-center justify-between group", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconHistory, {}), (0, jsx_runtime_1.jsx)("span", { className: "text-sm text-neutral-300 tracking-wider font-medium", children: "Mining Records" }), records.length > 0 && ((0, jsx_runtime_1.jsxs)("span", { className: "text-xs bg-neutral-500/20 text-neutral-300 px-1.5 py-0.5 rounded", children: [records.length, " records"] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-1 text-xs text-neutral-400 group-hover:text-cyan-400 transition-colors", children: showRecords ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Collapse ", (0, jsx_runtime_1.jsx)(IconChevronUp, {})] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Expand ", (0, jsx_runtime_1.jsx)(IconChevronDown, {})] })) })] }), showRecords && ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 pt-4 border-t border-neutral-700", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-neutral-500 text-xs mb-4", children: "All x402 non-custodial minting transaction records" }), recordsLoading ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center py-8", children: (0, jsx_runtime_1.jsx)(Spinner, {}) })) : records.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "overflow-x-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "w-full text-sm", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { className: "text-neutral-400 text-xs border-b border-neutral-700", children: [(0, jsx_runtime_1.jsx)("th", { className: "text-left py-2 font-normal", children: "Time" }), (0, jsx_runtime_1.jsx)("th", { className: "text-right py-2 font-normal", children: "Paid" }), (0, jsx_runtime_1.jsx)("th", { className: "text-right py-2 font-normal", children: "Minted" }), (0, jsx_runtime_1.jsx)("th", { className: "text-right py-2 font-normal", children: "Status" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: records.map((r, i) => ((0, jsx_runtime_1.jsxs)("tr", { className: "border-b border-neutral-800 hover:bg-neutral-800/50", children: [(0, jsx_runtime_1.jsx)("td", { className: "py-3 text-neutral-300 font-mono text-xs", children: formatDateTime(r.created_at || r.timestamp) }), (0, jsx_runtime_1.jsxs)("td", { className: "py-3 text-right text-white font-mono", children: [fmt(r.payment_amount ?? r.stablecoin_amount ?? r.usdc_amount ?? r.paid ?? 0), " ", r.payment_type || 'USDC'] }), (0, jsx_runtime_1.jsxs)("td", { className: "py-3 text-right text-cyan-400 font-mono", children: ["+", fmt(r.mcc_amount ?? r.minted ?? 0), " MCC"] }), (0, jsx_runtime_1.jsx)("td", { className: "py-3 text-right", children: (0, jsx_runtime_1.jsx)("span", { className: `text-xs px-1.5 py-0.5 rounded ${(r.status === 'completed' || r.status === 'confirmed')
|
|
78
78
|
? 'bg-white/20 text-white'
|
|
79
79
|
: 'bg-neutral-700 text-neutral-400'}`, children: r.status || 'confirmed' }) })] }, r.id ?? i))) })] }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "text-center py-8 text-neutral-500 text-sm", children: "No mining records yet" }))] }))] }) }), s?.pool_mcc_bought != null && ((0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider uppercase mb-3", children: "POOL STATUS" }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "total_market_made" }), (0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-white font-mono", children: fmt(s.pool_mcc_bought ?? 0) }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500 mt-1", children: "MCC bought via CPMM" })] }), s?.pool_usdc_balance != null && ((0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "stablecoin_pool" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-lg font-bold text-white font-mono", children: ["$", fmt((s.pool_usdc_balance ?? 0) + (s.pool_usdt_balance ?? 0))] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-xs text-neutral-500 mt-1", children: ["USDT ", fmt(s.pool_usdt_balance ?? 0), " / USDC ", fmt(s.pool_usdc_balance ?? 0)] })] })), s?.pool_tvl != null && ((0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "tvl" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-lg font-bold text-white font-mono", children: ["$", fmt(s.pool_tvl ?? 0)] }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500 mt-1", children: "Total value locked" })] }))] })] })), stats && ((0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400 tracking-wider uppercase mb-4 font-mono", children: "MY_MINING_STATS" }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 lg:grid-cols-4 gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "total_mined" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-lg font-bold text-white font-mono", children: [fmt(stats.total_mined ?? 0), " MCC"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "total_paid" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-lg font-bold text-white font-mono", children: [fmt(stats.total_paid ?? 0), " USDC"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "mining_count" }), (0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-white font-mono", children: stats.mining_count ?? 0 })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-800 rounded p-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-400 tracking-wider font-mono", children: "active_days" }), (0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-white font-mono", children: stats.active_days_30d ?? 0 })] })] })] })), (0, jsx_runtime_1.jsx)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-start gap-2 text-neutral-400 text-sm", children: [(0, jsx_runtime_1.jsx)(IconShield, { className: "w-4 h-4 text-white mt-0.5 flex-shrink-0" }), (0, jsx_runtime_1.jsx)("span", { children: "All transactions are executed on-chain via X402 protocol. Your private keys never leave your wallet. Microcosm uses non-custodial minting with atomic on-chain verification." })] }) })] }));
|
|
80
80
|
}
|
|
@@ -57,9 +57,9 @@ function MicrocosmOrganizationPage({ basePath = '', onNavigate }) {
|
|
|
57
57
|
// User stats from dashboard API
|
|
58
58
|
const totalUsers = us?.total_users ?? org?.total_members ?? 0;
|
|
59
59
|
const miners = us?.by_level?.miner ?? 0;
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const unassigned = totalUsers - miners -
|
|
60
|
+
const commanders = us?.by_level?.commander ?? 0;
|
|
61
|
+
const pioneers = us?.by_level?.pioneer ?? 0;
|
|
62
|
+
const unassigned = Math.max(0, totalUsers - miners - commanders - pioneers);
|
|
63
63
|
// Territory counts from org summary
|
|
64
64
|
const stationCount = org?.total_stations ?? 0;
|
|
65
65
|
const matrixCount = org?.total_matrices ?? 0;
|
|
@@ -73,22 +73,20 @@ function MicrocosmOrganizationPage({ basePath = '', onNavigate }) {
|
|
|
73
73
|
return ((0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto p-6 space-y-6", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-2xl font-bold text-white tracking-wider", children: "Organization" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400 mt-1", children: "Ecosystem structure & territory management" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconUsers, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "User Statistics" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "User Statistics" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 md:grid-cols-5 gap-4", children: [
|
|
74
74
|
{ label: 'Total Users', value: totalUsers, icon: (0, jsx_runtime_1.jsx)(IconUsers, { size: 16, className: "text-cyan-400/70" }) },
|
|
75
75
|
{ label: 'Miner', value: miners, icon: (0, jsx_runtime_1.jsx)(IconPickaxe, { size: 16, className: "text-cyan-400/70" }) },
|
|
76
|
-
{ label: '
|
|
77
|
-
{ label: '
|
|
78
|
-
{ label: 'Unassigned', value: unassigned
|
|
76
|
+
{ label: 'Commander', value: commanders, icon: (0, jsx_runtime_1.jsx)(IconUserCheck, { size: 16, className: "text-cyan-400/70" }) },
|
|
77
|
+
{ label: 'Pioneer', value: pioneers, icon: (0, jsx_runtime_1.jsx)(IconCompass, { size: 16, className: "text-cyan-400/70" }) },
|
|
78
|
+
{ label: 'Unassigned', value: unassigned, icon: (0, jsx_runtime_1.jsx)(IconUserX, { size: 16, className: "text-cyan-400/70" }) },
|
|
79
79
|
].map(({ label, value, icon }) => ((0, jsx_runtime_1.jsxs)("div", { className: "p-3 bg-neutral-800 rounded border border-neutral-700", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5 mb-1", children: [icon, (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-cyan-400/70 tracking-wider", children: label })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-white font-mono", children: fmt(value) })] }, label))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [(0, jsx_runtime_1.jsx)(FlipCard, { front: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconNetwork, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Territory Distribution" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Territory Distribution" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-4 gap-3", children: [
|
|
80
80
|
{ label: 'Station', count: stationCount, icon: (0, jsx_runtime_1.jsx)(IconBuilding, { size: 20, className: "text-cyan-400/70 mx-auto mb-2" }) },
|
|
81
81
|
{ label: 'Matrix', count: matrixCount, icon: (0, jsx_runtime_1.jsx)(IconGrid, { size: 20, className: "text-cyan-400/70 mx-auto mb-2" }) },
|
|
82
82
|
{ label: 'Sector', count: sectorCount, icon: (0, jsx_runtime_1.jsx)(IconMap, { size: 20, className: "text-cyan-400/70 mx-auto mb-2" }) },
|
|
83
83
|
{ label: 'System', count: systemCount, icon: (0, jsx_runtime_1.jsx)(IconGlobe, { size: 20, className: "text-cyan-400/70 mx-auto mb-2" }) },
|
|
84
|
-
].map(({ label, count, icon }) => ((0, jsx_runtime_1.jsxs)("div", { className: "text-center p-3 bg-neutral-800 rounded border border-neutral-700", children: [icon, (0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-white font-mono", children: count }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-cyan-400/70 tracking-wider", children: label })] }, label))) }), (0, jsx_runtime_1.jsx)("div", { className: "mt-3 text-xs text-neutral-500", children: "Four-tier architecture: System > Sector > Matrix > Station" })] }), back: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconNetwork, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Territory System" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Territory System" })] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-300 leading-relaxed", children: "The territory system is the organizational backbone of the Microcosm ecosystem, structuring all users into a hierarchical governance model." }), (0, jsx_runtime_1.jsxs)("div", { className: "text-sm text-neutral-400 leading-relaxed space-y-1.5", children: [(0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "Station" }), " \u2014 Base unit housing up to 1,000 users"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "Matrix" }), " \u2014 Regional group managing 10 Stations"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "Sector" }), " \u2014 Area governance overseeing 10 Matrices"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "System" }), " \u2014 Top-level domain containing 10 Sectors"] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400 leading-relaxed", children: "Magistrates are territory managers elected through the auction system. They govern their territory and receive a share of mining companion yield." })] }) }), (0, jsx_runtime_1.jsx)(FlipCard, { front: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconBuilding, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Vault Balance" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Vault Balance" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-4 bg-neutral-800 rounded border border-neutral-700", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-3xl font-bold text-cyan-300 font-mono", children: formatMCD(totalVaultMCD) }), (0, jsx_runtime_1.jsx)("div", { className: "text-sm text-cyan-400/50 mt-1", children: "MCD" })] }), (0, jsx_runtime_1.jsx)("div", { className: "mt-3 text-xs text-neutral-500", children: "Daily distribution: 1% of vault balance distributed to territory miners" })] }), back: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconBuilding, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Vault Mechanism" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Vault Mechanism" })] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-300 leading-relaxed", children: "Each territory maintains a vault that accumulates MCD from mining companion yield and distributes it to active miners daily." }), (0, jsx_runtime_1.jsxs)("div", { className: "text-sm text-neutral-400 leading-relaxed space-y-1.5", children: [(0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Source" }), " \u2014 30% of mining companion yield flows to territory vault as MCD"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Distribution" }), " \u2014 1% of vault balance distributed daily to territory miners"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Peg" }), " \u2014 MCD is pegged 1:1 to USDT/USDC"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Transparency" }), " \u2014 All vault balances and distributions are on-chain verifiable"] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400 leading-relaxed", children: "The vault creates a positive feedback loop: more mining activity increases the vault, which increases daily payouts, attracting more miners." })] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconCrown, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Level Progression" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Level Progression" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-
|
|
85
|
-
{ level:
|
|
86
|
-
{ level: 2, en: 'Prospect', zh: '\u63A2\u77FF\u8005', condition: 'First mining' },
|
|
87
|
-
{ level: 3, en: 'Miner', zh: '\u77FF\u5DE5', condition: '21d/30d mining' },
|
|
84
|
+
].map(({ label, count, icon }) => ((0, jsx_runtime_1.jsxs)("div", { className: "text-center p-3 bg-neutral-800 rounded border border-neutral-700", children: [icon, (0, jsx_runtime_1.jsx)("div", { className: "text-lg font-bold text-white font-mono", children: count }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-cyan-400/70 tracking-wider", children: label })] }, label))) }), (0, jsx_runtime_1.jsx)("div", { className: "mt-3 text-xs text-neutral-500", children: "Four-tier architecture: System > Sector > Matrix > Station" })] }), back: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconNetwork, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Territory System" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Territory System" })] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-300 leading-relaxed", children: "The territory system is the organizational backbone of the Microcosm ecosystem, structuring all users into a hierarchical governance model." }), (0, jsx_runtime_1.jsxs)("div", { className: "text-sm text-neutral-400 leading-relaxed space-y-1.5", children: [(0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "Station" }), " \u2014 Base unit housing up to 1,000 users"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "Matrix" }), " \u2014 Regional group managing 10 Stations"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "Sector" }), " \u2014 Area governance overseeing 10 Matrices"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80 font-mono", children: "System" }), " \u2014 Top-level domain containing 10 Sectors"] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400 leading-relaxed", children: "Magistrates are territory managers elected through the auction system. They govern their territory and receive a share of mining companion yield." })] }) }), (0, jsx_runtime_1.jsx)(FlipCard, { front: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconBuilding, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Vault Balance" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Vault Balance" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-4 bg-neutral-800 rounded border border-neutral-700", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-3xl font-bold text-cyan-300 font-mono", children: formatMCD(totalVaultMCD) }), (0, jsx_runtime_1.jsx)("div", { className: "text-sm text-cyan-400/50 mt-1", children: "MCD" })] }), (0, jsx_runtime_1.jsx)("div", { className: "mt-3 text-xs text-neutral-500", children: "Daily distribution: 1% of vault balance distributed to territory miners" })] }), back: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconBuilding, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Vault Mechanism" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Vault Mechanism" })] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-300 leading-relaxed", children: "Each territory maintains a vault that accumulates MCD from mining companion yield and distributes it to active miners daily." }), (0, jsx_runtime_1.jsxs)("div", { className: "text-sm text-neutral-400 leading-relaxed space-y-1.5", children: [(0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Source" }), " \u2014 30% of mining companion yield flows to territory vault as MCD"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Distribution" }), " \u2014 1% of vault balance distributed daily to territory miners"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Peg" }), " \u2014 MCD is pegged 1:1 to USDT/USDC"] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-cyan-400/80", children: "Transparency" }), " \u2014 All vault balances and distributions are on-chain verifiable"] })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400 leading-relaxed", children: "The vault creates a positive feedback loop: more mining activity increases the vault, which increases daily payouts, attracting more miners." })] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconCrown, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Level Progression" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Level Progression" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-5 gap-3", children: [
|
|
85
|
+
{ level: 3, en: 'Miner', zh: '\u77FF\u5DE5', condition: 'Register account' },
|
|
88
86
|
{ level: 4, en: 'Commander', zh: '\u6307\u6325\u5B98', condition: 'Station NFT' },
|
|
89
|
-
{ level: 5, en: 'Pioneer', zh: '\u5148\u9A71\u8005', condition: 'Matrix
|
|
90
|
-
{ level: 6, en: 'Warden', zh: '\u5B88\u62A4\u8005', condition: 'Sector
|
|
91
|
-
{ level: 7, en: 'Admiral', zh: '\u63D0\u7763', condition: 'System
|
|
87
|
+
{ level: 5, en: 'Pioneer', zh: '\u5148\u9A71\u8005', condition: '10 Stations (auto-mint Matrix)' },
|
|
88
|
+
{ level: 6, en: 'Warden', zh: '\u5B88\u62A4\u8005', condition: '10 Matrices (auto-mint Sector)' },
|
|
89
|
+
{ level: 7, en: 'Admiral', zh: '\u63D0\u7763', condition: '10 Sectors (auto-mint System)' },
|
|
92
90
|
].map(({ level, en, zh, condition }) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 p-3 bg-neutral-800 rounded border border-neutral-700", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-2xl font-bold text-cyan-400 font-mono leading-none", children: level }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-medium text-neutral-200", children: en }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-400", children: zh }), (0, jsx_runtime_1.jsx)("div", { className: "text-xs text-neutral-500", children: condition })] })] }, level))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-neutral-900 border border-neutral-700 rounded-lg p-6 hover:border-cyan-400/50 transition-colors", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(IconLayers, { size: 20, className: "text-cyan-400" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-bold text-cyan-400 tracking-wide", children: "Territory Architecture" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[10px] text-neutral-500 font-mono tracking-wider", children: "Territory Structure" })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "hidden sm:flex items-center gap-3 text-[10px] font-mono text-neutral-500", children: [
|
|
93
91
|
{ label: 'System', color: 'bg-purple-400' },
|
|
94
92
|
{ label: 'Sector', color: 'bg-blue-400' },
|
package/dist/menu-config.js
CHANGED
|
@@ -21,63 +21,74 @@ function getMenuDescription(item, locale) {
|
|
|
21
21
|
}
|
|
22
22
|
exports.dashboardMenu = {
|
|
23
23
|
title: 'Overview',
|
|
24
|
+
titles: { zh: '概览', ja: '概要', ko: '개요' },
|
|
24
25
|
key: 'overview',
|
|
25
26
|
icon: lucide_react_1.LayoutDashboard,
|
|
26
27
|
items: [
|
|
27
28
|
{
|
|
28
29
|
title: 'Dashboard',
|
|
30
|
+
titles: { zh: '仪表盘', ja: 'ダッシュボード', ko: '대시보드' },
|
|
29
31
|
key: 'dashboard',
|
|
30
32
|
path: '/user-system/dashboard',
|
|
31
33
|
icon: lucide_react_1.LayoutDashboard,
|
|
32
34
|
description: 'Account overview and statistics',
|
|
35
|
+
descriptions: { zh: '账户总览与统计', ja: 'アカウント概要と統計', ko: '계정 개요 및 통계' },
|
|
33
36
|
},
|
|
34
37
|
],
|
|
35
38
|
};
|
|
36
39
|
exports.blockchainMenu = {
|
|
37
40
|
title: 'Blockchain',
|
|
41
|
+
titles: { zh: '区块链', ja: 'ブロックチェーン', ko: '블록체인' },
|
|
38
42
|
key: 'blockchain',
|
|
39
43
|
icon: lucide_react_1.Coins,
|
|
40
44
|
items: [
|
|
41
45
|
{
|
|
42
46
|
title: 'Mining',
|
|
47
|
+
titles: { zh: '挖矿', ja: 'マイニング', ko: '마이닝' },
|
|
43
48
|
key: 'mining',
|
|
44
49
|
path: '/mcc/mining',
|
|
45
50
|
icon: lucide_react_1.Pickaxe,
|
|
46
51
|
description: 'Mine MCC with stablecoin',
|
|
52
|
+
descriptions: { zh: '用稳定币挖矿 MCC', ja: 'ステーブルコインでMCCをマイニング', ko: '스테이블코인으로 MCC 채굴' },
|
|
47
53
|
},
|
|
48
54
|
{
|
|
49
55
|
title: 'Wallet',
|
|
56
|
+
titles: { zh: '钱包', ja: 'ウォレット', ko: '지갑' },
|
|
50
57
|
key: 'wallet',
|
|
51
58
|
path: '/mcc/wallet',
|
|
52
59
|
icon: lucide_react_1.Wallet,
|
|
53
60
|
description: 'MCC asset overview',
|
|
61
|
+
descriptions: { zh: 'MCC 资产总览', ja: 'MCC資産概要', ko: 'MCC 자산 개요' },
|
|
54
62
|
},
|
|
55
63
|
{
|
|
56
64
|
title: 'MCD Credits',
|
|
65
|
+
titles: { zh: 'MCD 积分', ja: 'MCDクレジット', ko: 'MCD 크레딧' },
|
|
57
66
|
key: 'mcd',
|
|
58
67
|
path: '/mcc/mcd',
|
|
59
68
|
icon: lucide_react_1.Ticket,
|
|
60
69
|
description: 'MCD balance and records',
|
|
70
|
+
descriptions: { zh: 'MCD 余额与记录', ja: 'MCD残高と履歴', ko: 'MCD 잔액 및 기록' },
|
|
61
71
|
},
|
|
62
72
|
],
|
|
63
73
|
};
|
|
64
74
|
exports.web3OsMenu = {
|
|
65
75
|
title: 'Web3 OS',
|
|
76
|
+
titles: { zh: 'Web3 操作系统', ja: 'Web3 OS', ko: 'Web3 OS' },
|
|
66
77
|
key: 'web3os',
|
|
67
78
|
icon: lucide_react_1.Users,
|
|
68
79
|
items: [
|
|
69
80
|
{
|
|
70
81
|
title: 'Auctions',
|
|
71
|
-
titles: { zh: '拍卖', ja: '
|
|
82
|
+
titles: { zh: '拍卖', ja: 'オークション', ko: '경매' },
|
|
72
83
|
key: 'auctions',
|
|
73
84
|
path: '/mcc/auctions',
|
|
74
85
|
icon: lucide_react_1.Gift,
|
|
75
86
|
description: 'Territory auction bidding',
|
|
76
|
-
descriptions: { zh: '领地拍卖竞价', ja: '
|
|
87
|
+
descriptions: { zh: '领地拍卖竞价', ja: '領地オークション入札', ko: '영토 경매 입찰' },
|
|
77
88
|
},
|
|
78
89
|
{
|
|
79
90
|
title: 'Territories',
|
|
80
|
-
titles: { zh: '领地管理', ja: '
|
|
91
|
+
titles: { zh: '领地管理', ja: '領地管理', ko: '영토 관리' },
|
|
81
92
|
key: 'territory',
|
|
82
93
|
path: '/user-system/territory',
|
|
83
94
|
icon: lucide_react_1.Building2,
|
|
@@ -86,39 +97,39 @@ exports.web3OsMenu = {
|
|
|
86
97
|
},
|
|
87
98
|
{
|
|
88
99
|
title: 'NFT Fragments',
|
|
89
|
-
titles: { zh: 'NFT 碎片化', ja: 'NFT
|
|
100
|
+
titles: { zh: 'NFT 碎片化', ja: 'NFTフラグメント', ko: 'NFT 프래그먼트' },
|
|
90
101
|
key: 'fragments',
|
|
91
102
|
path: '/mcc/fragments',
|
|
92
103
|
icon: lucide_react_1.Puzzle,
|
|
93
104
|
description: 'Fractionalize territory NFTs',
|
|
94
|
-
descriptions: { zh: '领地 NFT 碎片化交易', ja: 'NFT
|
|
105
|
+
descriptions: { zh: '领地 NFT 碎片化交易', ja: '領地NFTのフラクション化', ko: '영토 NFT 분할화 거래' },
|
|
95
106
|
},
|
|
96
107
|
{
|
|
97
108
|
title: 'Lending',
|
|
98
|
-
titles: { zh: '去中心化借贷', ja: '
|
|
109
|
+
titles: { zh: '去中心化借贷', ja: 'レンディング', ko: '대출' },
|
|
99
110
|
key: 'lending',
|
|
100
111
|
path: '/mcc/lending',
|
|
101
112
|
icon: lucide_react_1.Landmark,
|
|
102
113
|
description: 'Borrow MCC with NFT collateral',
|
|
103
|
-
descriptions: { zh: 'NFT 抵押借贷 MCC', ja: 'NFT
|
|
114
|
+
descriptions: { zh: 'NFT 抵押借贷 MCC', ja: 'NFT担保でMCCを借入', ko: 'NFT 담보 MCC 대출' },
|
|
104
115
|
},
|
|
105
116
|
{
|
|
106
117
|
title: 'Voting',
|
|
107
|
-
titles: { zh: '投票', ja: '
|
|
118
|
+
titles: { zh: '投票', ja: '投票', ko: '투표' },
|
|
108
119
|
key: 'voting',
|
|
109
120
|
path: '/mcc/voting',
|
|
110
121
|
icon: lucide_react_1.Vote,
|
|
111
122
|
description: 'Community proposal voting',
|
|
112
|
-
descriptions: { zh: '社区提案投票', ja: '
|
|
123
|
+
descriptions: { zh: '社区提案投票', ja: 'コミュニティ提案投票', ko: '커뮤니티 제안 투표' },
|
|
113
124
|
},
|
|
114
125
|
{
|
|
115
126
|
title: 'Organization',
|
|
116
|
-
titles: { zh: '组织', ja: '
|
|
127
|
+
titles: { zh: '组织', ja: '組織', ko: '조직' },
|
|
117
128
|
key: 'organization',
|
|
118
129
|
path: '/user-system/organization',
|
|
119
130
|
icon: lucide_react_1.Users,
|
|
120
131
|
description: 'Organization structure',
|
|
121
|
-
descriptions: { zh: '组织架构管理', ja: '
|
|
132
|
+
descriptions: { zh: '组织架构管理', ja: '組織構造管理', ko: '조직 구조 관리' },
|
|
122
133
|
},
|
|
123
134
|
],
|
|
124
135
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microcosmmoney/portal-react",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.1",
|
|
4
4
|
"description": "Microcosm Portal UI components for React/Next.js",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"lucide-react": ">=0.300.0"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@microcosmmoney/auth-core": "
|
|
22
|
-
"@microcosmmoney/auth-react": "
|
|
21
|
+
"@microcosmmoney/auth-core": "^2.3.1",
|
|
22
|
+
"@microcosmmoney/auth-react": "^2.3.1"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/react": "^18.0.0",
|