mirror of
https://github.com/lux-tel/websites.git
synced 2026-10-30 20:31:36 +00:00
148 lines
4.7 KiB
TypeScript
148 lines
4.7 KiB
TypeScript
import { SENT_DECIMALS, SENT_SYMBOL, TOKEN } from '@session/contracts';
|
|
import { Social } from '@session/ui/components/SocialLinkList';
|
|
import { cn } from '@session/ui/lib/utils';
|
|
import { UnderlinedTooltip } from '@session/ui/ui/tooltip';
|
|
import { formatBigIntTokenValue } from '@session/util-crypto/maths';
|
|
import type { RichTranslationValues } from 'next-intl';
|
|
import Link from 'next/link';
|
|
import type { AriaRole, ReactNode } from 'react';
|
|
import { arbitrum, arbitrumSepolia } from 'viem/chains';
|
|
import {
|
|
FAUCET,
|
|
NETWORK,
|
|
SESSION_NETWORK,
|
|
SESSION_NODE_FULL_STAKE_AMOUNT,
|
|
SESSION_NODE_MIN_STAKE_MULTI_OPERATOR,
|
|
SESSION_NODE_MIN_STAKE_SOLO_OPERATOR,
|
|
SOCIALS,
|
|
TICKER,
|
|
URL,
|
|
} from './constants';
|
|
|
|
export const internalLink = (href: string, prefetch?: boolean) => {
|
|
return (children: ReactNode) => (
|
|
<Link href={href} prefetch={prefetch} className="cursor-pointer text-session-green underline">
|
|
{children}
|
|
</Link>
|
|
);
|
|
};
|
|
|
|
export const externalLink = (href: string, className?: string) => {
|
|
return (children: ReactNode) => (
|
|
<a
|
|
href={href}
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className={className ?? 'cursor-pointer text-session-green'}
|
|
>
|
|
{children}
|
|
</a>
|
|
);
|
|
};
|
|
|
|
export const clickableText = (onClick: () => void, role: AriaRole = 'button') => {
|
|
return (children: ReactNode) => (
|
|
<span
|
|
className="cursor-pointer text-session-green underline"
|
|
onClick={onClick}
|
|
onKeyDown={onClick}
|
|
role={role}
|
|
>
|
|
{children}
|
|
</span>
|
|
);
|
|
};
|
|
|
|
export const underlinedTooltip = (tooltipContent: ReactNode) => {
|
|
return (children: ReactNode) => (
|
|
<UnderlinedTooltip tooltipContent={tooltipContent} putContentInPortal>
|
|
{children}
|
|
</UnderlinedTooltip>
|
|
);
|
|
};
|
|
|
|
const defaultExternalLink = (href: string, text: ReactNode, className?: string) => () =>
|
|
externalLink(href, className ?? 'text-white underline')(text);
|
|
|
|
type FontWeight =
|
|
| 'font-extralight'
|
|
| 'font-light'
|
|
| 'font-normal'
|
|
| 'font-medium'
|
|
| 'font-semibold'
|
|
| 'font-bold'
|
|
| 'font-extrabold'
|
|
| 'font-black';
|
|
|
|
export const text = (weight?: FontWeight, className?: string) => {
|
|
return (children: ReactNode) => <span className={cn(weight, className)}>{children}</span>;
|
|
};
|
|
|
|
export const defaultTranslationElements = {
|
|
'text-extralight': text('font-extralight'),
|
|
'text-light': text('font-light'),
|
|
'text-normal': text('font-normal'),
|
|
'text-medium': text('font-medium'),
|
|
'text-semibold': text('font-semibold'),
|
|
'text-bold': text('font-bold'),
|
|
'text-extrabold': text('font-extrabold'),
|
|
'text-black': text('font-black'),
|
|
br: () => <br />,
|
|
'discord-server-link': defaultExternalLink(
|
|
SOCIALS[Social.Discord].link,
|
|
"Session Token's Discord server"
|
|
),
|
|
'contact-support-link': defaultExternalLink(
|
|
SOCIALS[Social.Discord].link,
|
|
'contact the Session team via Discord.'
|
|
),
|
|
'please-contract-support-link': defaultExternalLink(
|
|
SOCIALS[Social.Discord].link,
|
|
'please contract support',
|
|
'text-session-green'
|
|
),
|
|
'incentive-program-link': defaultExternalLink(
|
|
URL.INCENTIVE_PROGRAM,
|
|
'Session Testnet Incentive Program'
|
|
),
|
|
'discord-link': externalLink(SOCIALS[Social.Discord].link, 'text-session-green'),
|
|
'gas-faucet-link': externalLink(URL.ARB_SEP_FAUCET, 'text-session-green'),
|
|
'gas-info-link': externalLink(URL.GAS_INFO, 'text-session-green'),
|
|
'oxen-program-link': defaultExternalLink(
|
|
URL.OXEN_SERVICE_NODE_BONUS_PROGRAM,
|
|
'Oxen Service Node Bonus program',
|
|
'text-session-green'
|
|
),
|
|
'session-token-community-snapshot-link': defaultExternalLink(
|
|
URL.SESSION_TOKEN_COMMUNITY_SNAPSHOT,
|
|
'Snapshot',
|
|
'text-session-green'
|
|
),
|
|
'my-stakes-link': internalLink('/mystakes'),
|
|
} satisfies RichTranslationValues;
|
|
|
|
export const defaultTranslationVariables = {
|
|
tokenSymbol: TOKEN.SYMBOL,
|
|
gas: 'Gas',
|
|
gasPrice: 'Gas Price',
|
|
gasTokenSymbol: TICKER.ETH,
|
|
ethTokenSymbol: TICKER.ETH,
|
|
mainnetName: NETWORK.MAINNET,
|
|
testnetName: NETWORK.TESTNET,
|
|
mainNetworkChain: arbitrum.name,
|
|
testNetworkChain: arbitrumSepolia.name,
|
|
minimumFaucetGasAmount: FAUCET.MIN_ETH_BALANCE,
|
|
faucetDrip: FAUCET.DRIP,
|
|
sessionNetwork: SESSION_NETWORK,
|
|
oxenProgram: 'Oxen Service Node Bonus program',
|
|
notFoundContentType: 'page',
|
|
fullStateAmount: `${formatBigIntTokenValue(SESSION_NODE_FULL_STAKE_AMOUNT, SENT_DECIMALS, 0)} ${SENT_SYMBOL}`,
|
|
minStakeSolo: `${formatBigIntTokenValue(SESSION_NODE_MIN_STAKE_SOLO_OPERATOR, SENT_DECIMALS, 0)} ${SENT_SYMBOL}`,
|
|
minStakeMulti: `${formatBigIntTokenValue(SESSION_NODE_MIN_STAKE_MULTI_OPERATOR, SENT_DECIMALS, 0)} ${SENT_SYMBOL}`,
|
|
} satisfies RichTranslationValues;
|
|
|
|
export const defaultTranslationValues: RichTranslationValues = {
|
|
...defaultTranslationElements,
|
|
...defaultTranslationVariables,
|
|
};
|