/* ============================================================
CHAINUS — Value, Features (broken bento), Anywhere
============================================================ */
function SignalMap({ t }) {
const nodes = t.dir === 'zh'
? [
['社区', '讨论 / 关注'],
['资产', '上链 / 所有权'],
['行情', '价格 / 情绪'],
['学习', '术语 / 引导'],
['信任', '钱包 / 合约'],
]
: [
['Community', 'Posts / follows'],
['Assets', 'Mint / ownership'],
['Market', 'Price / mood'],
['Learning', 'Terms / guidance'],
['Trust', 'Wallet / contracts'],
];
return (
ChainUs
{t.dir === 'zh' ? '把散乱数据合成信号' : 'Turns scattered data into signal'}
{nodes.map((n, i) => (
{n[0]}
{n[1]}
))}
);
}
function SignalConstellation({ t }) {
const nodes = t.dir === 'zh'
? [
['Ray 上链插画', 'Post'],
['0.12 ETH', 'Asset'],
['RWA 热度上升', 'Topic'],
['BTC +2.4%', 'Market'],
['情绪 68', 'Mood'],
['新手解释', 'Learn'],
]
: [
['Ray minted art', 'Post'],
['0.12 ETH', 'Asset'],
['RWA rising', 'Topic'],
['BTC +2.4%', 'Market'],
['Mood 68', 'Mood'],
['Plain explain', 'Learn'],
];
return (
{nodes.map((n, i) => (
{n[0]}
{n[1]}
))}
);
}
function ValueProp({ t }) {
const v = t.value;
return (
{v.eyebrow}
{v.title[0]} {v.title[1]}
{v.body}
{v.stats.map((s, i) => (
{s.k}
{s.v}
))}
);
}
/* native mini feed rows used in the feed feature */
function FeedPreview({ t }) {
return (
{t.hero.cardFeedUser}{t.dir === 'zh' ? '上链了一组插画' : 'minted an illustration set'}
♥ 248↗ 31
);
}
function Features({ t }) {
const items = t.features.items;
const feed = items[0], tok = items[1], learn = items[2];
return (
{/* Feature 1 — feed, full split story */}
{feed.tag}
{feed.title}
{feed.body}
{/* Features 2 + 3 — asymmetric pair */}
{tok.tag}
{tok.title}
{tok.body}
{t.dir === 'zh' ? '选择对象' : 'Choose item'}
{t.dir === 'zh' ? '确认信息' : 'Confirm details'}
{t.dir === 'zh' ? '发布上链' : 'Publish on-chain'}
{learn.tag}
{learn.title}
{learn.body}
Gas{t.dir === 'zh' ? '= 网络手续费' : '= network fee'}
Mint{t.dir === 'zh' ? '= 把东西上链' : '= put it on-chain'}
RWA{t.dir === 'zh' ? '= 现实世界资产' : '= real-world asset'}
);
}
/* ---- Mobile / Web / Tablet ---- */
function Anywhere({ t }) {
const a = t.anywhere;
const [view, setView] = useState('web');
const views = [
{ id: 'mobile', label: t.dir === 'zh' ? '手机 App' : 'Mobile' },
{ id: 'web', label: t.dir === 'zh' ? '网页版' : 'Web' },
{ id: 'tablet', label: t.dir === 'zh' ? '平板' : 'Tablet' },
];
return (
{a.title[0]} {a.title[1]}
{a.body}
{a.tags.map((tag, i) => {tag.t})}
{views.map((vw) => (
))}
{t.dir === 'zh' ? 'Feed' : 'Feed'}
{t.dir === 'zh' ? 'Mint' : 'Mint'}
{t.dir === 'zh' ? 'Market' : 'Market'}
{view === 'web' &&
}
{view === 'mobile' && }
{view === 'tablet' && }
);
}
Object.assign(window, { ValueProp, Features, Anywhere, FeedPreview });