Maker form

This commit is contained in:
koalasat
2025-05-11 12:34:43 +02:00
parent 17bc47750d
commit 58763df9db
22 changed files with 408 additions and 737 deletions

View File

@ -1,4 +1,4 @@
import React from 'react';
import React, { useContext, useMemo, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import {
SliderThumb,
@ -15,6 +15,7 @@ import { FlagWithProps } from '../Icons';
import RangeSlider from './RangeSlider';
import currencyDict from '../../../static/assets/currencies.json';
import { pn } from '../../utils';
import { GarageContext, UseGarageStoreType } from '../../contexts/GarageContext';
const RangeThumbComponent: React.FC<React.PropsWithChildren> = (props) => {
const { children, ...other } = props;
@ -29,39 +30,93 @@ const RangeThumbComponent: React.FC<React.PropsWithChildren> = (props) => {
};
interface AmountRangeProps {
minAmount: string;
maxAmount: string;
type: number;
amountSafeThresholds: number[];
currency: number;
handleRangeAmountChange: (event: Event, value: number | number[], activeThumb: number) => void;
handleMaxAmountChange: (
e: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>,
) => void;
handleMinAmountChange: (
e: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>,
) => void;
setHasRangeError: (hasRangeError: boolean) => void;
handleCurrencyChange: (newCurrency: number) => void;
maxAmountError: boolean;
minAmountError: boolean;
currencyCode: string;
amountLimits: number[];
}
const AmountRange: React.FC<AmountRangeProps> = ({
minAmount,
handleRangeAmountChange,
amountSafeThresholds,
currency,
currencyCode,
handleCurrencyChange,
setHasRangeError,
amountLimits,
maxAmount,
minAmountError,
maxAmountError,
handleMinAmountChange,
handleMaxAmountChange,
}) => {
const { setMaker, maker } = useContext<UseGarageStoreType>(GarageContext);
const theme = useTheme();
const { t } = useTranslation();
const maxRangeAmountMultiple = 14.8;
const minRangeAmountMultiple = 1.6;
const minAmountError = useMemo(() => {
return (
maker.maxAmount !== null &&
maker.minAmount !== null &&
(maker.minAmount < amountLimits[0] * 0.99 ||
maker.maxAmount < maker.minAmount ||
maker.minAmount < maker.maxAmount / (maxRangeAmountMultiple + 0.15) ||
maker.minAmount * (minRangeAmountMultiple - 0.1) > maker.maxAmount)
);
}, [maker.minAmount, maker.maxAmount, amountLimits]);
const maxAmountError = useMemo(() => {
return (
maker.maxAmount !== null &&
maker.minAmount !== null &&
(maker.maxAmount > amountLimits[1] * 1.01 ||
maker.maxAmount < maker.minAmount ||
maker.minAmount < maker.maxAmount / (maxRangeAmountMultiple + 0.15) ||
maker.minAmount * (minRangeAmountMultiple - 0.1) > maker.maxAmount)
);
}, [maker.minAmount, maker.maxAmount, amountLimits]);
const handleRangeAmountChange = (
e: Event,
newValue: number | number[],
activeThumb: number,
): void => {
if (typeof newValue === 'number' || newValue.length < 2) return;
let minAmount = newValue[0];
let maxAmount = newValue[1];
minAmount = Math.min(
(amountLimits[1] * amountSafeThresholds[1]) / minRangeAmountMultiple,
minAmount,
);
maxAmount = Math.max(
minRangeAmountMultiple * amountLimits[0] * amountSafeThresholds[0],
maxAmount,
);
if (minAmount > maxAmount / minRangeAmountMultiple) {
if (activeThumb === 0) {
maxAmount = minRangeAmountMultiple * minAmount;
} else {
minAmount = maxAmount / minRangeAmountMultiple;
}
} else if (minAmount < maxAmount / maxRangeAmountMultiple) {
if (activeThumb === 0) {
maxAmount = maxRangeAmountMultiple * minAmount;
} else {
minAmount = maxAmount / maxRangeAmountMultiple;
}
}
setMaker({
...maker,
minAmount: parseFloat(minAmount.toPrecision(minAmount < 100 ? 2 : 3)),
maxAmount: parseFloat(maxAmount.toPrecision(maxAmount < 100 ? 2 : 3)),
});
};
useEffect(() => {
setHasRangeError(!minAmountError || !maxAmountError);
}, [minAmountError, maxAmountError]);
return (
<Grid item xs={12}>
@ -93,11 +148,19 @@ const AmountRange: React.FC<AmountRangeProps> = ({
variant='standard'
type='number'
size='small'
value={minAmount}
onChange={handleMinAmountChange}
value={maker.minAmount?.toString()}
onChange={(e) => {
setMaker((maker) => {
const value = Number(e.target.value);
return {
...maker,
minAmount: parseFloat(value.toPrecision(value < 100 ? 2 : 3)),
};
});
}}
error={minAmountError}
sx={{
width: `${minAmount.toString().length * 0.56}em`,
width: `${(maker.minAmount?.toString().length ?? 0) * 0.56}em`,
minWidth: '0.56em',
maxWidth: '2.8em',
}}
@ -116,11 +179,19 @@ const AmountRange: React.FC<AmountRangeProps> = ({
variant='standard'
size='small'
type='number'
value={maxAmount}
onChange={handleMaxAmountChange}
value={maker.maxAmount?.toString()}
onChange={(e) => {
setMaker((maker) => {
const value = Number(e.target.value);
return {
...maker,
maxAmount: parseFloat(value.toPrecision(value < 100 ? 2 : 3)),
};
});
}}
error={maxAmountError}
sx={{
width: `${maxAmount.toString().length * 0.56}em`,
width: `${(maker.maxAmount?.toString().length ?? 0) * 0.56}em`,
minWidth: '0.56em',
maxWidth: '3.36em',
}}
@ -159,7 +230,7 @@ const AmountRange: React.FC<AmountRangeProps> = ({
>
<RangeSlider
disableSwap={true}
value={[Number(minAmount), Number(maxAmount)]}
value={[maker.minAmount ?? amountLimits[0], maker.maxAmount ?? amountLimits[1]]}
step={(amountLimits[1] - amountLimits[0]) / 5000}
valueLabelDisplay='auto'
components={{ Thumb: RangeThumbComponent }}

View File

@ -15,9 +15,7 @@ import {
FormHelperText,
MenuItem,
FormControl,
Radio,
FormControlLabel,
RadioGroup,
Box,
useTheme,
Collapse,
@ -47,7 +45,6 @@ import { useNavigate } from 'react-router-dom';
interface MakerFormProps {
disableRequest?: boolean;
pricingMethods?: boolean;
collapseAll?: boolean;
onSubmit?: () => void;
onReset?: () => void;
@ -55,7 +52,6 @@ interface MakerFormProps {
}
const MakerForm = ({
pricingMethods = false,
disableRequest = false,
collapseAll = false,
onSubmit = () => {},
@ -72,7 +68,6 @@ const MakerForm = ({
const [badRequest, setBadRequest] = useState<string | null>(null);
const [amountLimits, setAmountLimits] = useState<number[]>([1, 1000]);
const [satoshisLimits, setSatoshisLimits] = useState<number[]>([20000, 4000000]);
const [currentPrice, setCurrentPrice] = useState<number | string>('...');
const [currencyCode, setCurrencyCode] = useState<string>('USD');
@ -80,10 +75,9 @@ const MakerForm = ({
const [openWorldmap, setOpenWorldmap] = useState<boolean>(false);
const [submittingRequest, setSubmittingRequest] = useState<boolean>(false);
const [amountRangeEnabled, setAmountRangeEnabled] = useState<boolean>(true);
const [hasRangeError, setHasRangeError] = useState<boolean>(false);
const [limits, setLimits] = useState<LimitList>({});
const maxRangeAmountMultiple = 14.8;
const minRangeAmountMultiple = 1.6;
const amountSafeThresholds = [1.03, 0.98];
useEffect(() => {
@ -105,11 +99,10 @@ const MakerForm = ({
const updateCoordinatorInfo = (): void => {
if (maker.coordinator != null) {
const newLimits = federation.getCoordinator(maker.coordinator).limits;
if (Object.keys(newLimits).length !== 0) {
const newLimits = federation.getCoordinator(maker.coordinator)?.limits;
if (newLimits && Object.keys(newLimits).length !== 0) {
updateAmountLimits(newLimits, fav.currency, maker.premium);
updateCurrentPrice(newLimits, fav.currency, maker.premium);
updateSatoshisLimits(newLimits);
setLimits(newLimits);
}
}
@ -135,28 +128,14 @@ const MakerForm = ({
setAmountLimits([minAmountLimit, maxAmountLimit]);
};
const updateSatoshisLimits = function (limitList: LimitList): void {
const minAmount: number = limitList[1000].min_amount * 100000000;
let maxAmount: number = limitList[1000].max_amount * 100000000;
maxAmount = Math.min(
federation.getCoordinator(maker.coordinator).size_limit / 100000000,
maxAmount,
);
setSatoshisLimits([minAmount, maxAmount]);
};
const updateCurrentPrice = function (
limitsList: LimitList,
currency: number,
premium: number,
): void {
const index = currency === 0 ? 1 : currency;
let price = '...';
if (maker.isExplicit && maker.amount > 0 && maker.satoshis > 0) {
price = maker.amount / (maker.satoshis / 100000000);
} else if (!maker.isExplicit) {
price = limitsList[index].price * (1 + premium / 100);
}
const price = limitsList[index].price * (1 + premium / 100);
setCurrentPrice(parseFloat(Number(price).toPrecision(5)));
};
@ -222,24 +201,6 @@ const MakerForm = ({
});
};
const handleMinAmountChange = function (
e: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>,
): void {
setMaker({
...maker,
minAmount: parseFloat(Number(e.target.value).toPrecision(e.target.value < 100 ? 2 : 3)),
});
};
const handleMaxAmountChange = function (
e: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>,
): void {
setMaker({
...maker,
maxAmount: parseFloat(Number(e.target.value).toPrecision(e.target.value < 100 ? 2 : 3)),
});
};
const handlePremiumChange: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement> =
function ({ target: { value } }): void {
const max = fav.mode === 'fiat' ? 999 : 99;
@ -263,42 +224,6 @@ const MakerForm = ({
});
};
const handleSatoshisChange = function (e: object): void {
const newSatoshis = e.target.value;
let badSatoshisText: string = '';
let satoshis: string = newSatoshis;
if (newSatoshis > satoshisLimits[1]) {
badSatoshisText = t('Must be less than {{maxSats}', { maxSats: pn(satoshisLimits[1]) });
satoshis = satoshisLimits[1];
}
if (newSatoshis < satoshisLimits[0]) {
badSatoshisText = t('Must be more than {{minSats}}', { minSats: pn(satoshisLimits[0]) });
satoshis = satoshisLimits[0];
}
setMaker({
...maker,
satoshis,
badSatoshisText,
});
};
const handleClickRelative = function (): void {
setMaker({
...maker,
isExplicit: false,
});
};
const handleClickExplicit = function (): void {
if (!maker.advancedOptions) {
setMaker({
...maker,
isExplicit: true,
});
}
};
const handleCreateOrder = function (): void {
const slot = garage.getSlot();
@ -318,9 +243,8 @@ const MakerForm = ({
max_amount: makerHasAmountRange ? maker.maxAmount : null,
payment_method:
maker.paymentMethodsText === '' ? 'not specified' : maker.paymentMethodsText,
is_explicit: maker.isExplicit,
premium: maker.isExplicit ? null : maker.premium === '' ? 0 : maker.premium,
satoshis: maker.isExplicit ? maker.satoshis : null,
premium: !maker.premium ? 0 : maker.premium,
satoshis: null,
public_duration: maker.publicDuration,
escrow_duration: maker.escrowDuration,
bond_size: maker.bondSize,
@ -377,40 +301,21 @@ const MakerForm = ({
const handleClickAdvanced = function (): void {
if (maker.advancedOptions) {
handleClickRelative();
setMaker({ ...maker, advancedOptions: false });
} else {
resetRange(true);
}
};
const minAmountError = useMemo(() => {
return (
maker.minAmount < amountLimits[0] * 0.99 ||
maker.maxAmount < maker.minAmount ||
maker.minAmount < maker.maxAmount / (maxRangeAmountMultiple + 0.15) ||
maker.minAmount * (minRangeAmountMultiple - 0.1) > maker.maxAmount
);
}, [maker.minAmount, maker.maxAmount, amountLimits]);
const maxAmountError = useMemo(() => {
return (
maker.maxAmount > amountLimits[1] * 1.01 ||
maker.maxAmount < maker.minAmount ||
maker.minAmount < maker.maxAmount / (maxRangeAmountMultiple + 0.15) ||
maker.minAmount * (minRangeAmountMultiple - 0.1) > maker.maxAmount
);
}, [maker.minAmount, maker.maxAmount, amountLimits]);
const resetRange = function (advancedOptions: boolean): void {
const index = fav.currency === 0 ? 1 : fav.currency;
const minAmount =
maker.amount !== ''
? parseFloat((maker.amount / 2).toPrecision(2))
maker.amount !== null
? (maker.amount / 2).toPrecision(2)
: parseFloat(Number(limits[index].max_amount * 0.25).toPrecision(2));
const maxAmount =
maker.amount !== ''
? parseFloat(maker.amount)
maker.amount !== null
? maker.amount
: parseFloat(Number(limits[index].max_amount * 0.75).toPrecision(2));
setMaker({
@ -421,44 +326,6 @@ const MakerForm = ({
});
};
const handleRangeAmountChange = (
e: Event,
newValue: number | number[],
activeThumb: number,
): void => {
let minAmount = e.target.value[0];
let maxAmount = e.target.value[1];
minAmount = Math.min(
(amountLimits[1] * amountSafeThresholds[1]) / minRangeAmountMultiple,
minAmount,
);
maxAmount = Math.max(
minRangeAmountMultiple * amountLimits[0] * amountSafeThresholds[0],
maxAmount,
);
if (minAmount > maxAmount / minRangeAmountMultiple) {
if (activeThumb === 0) {
maxAmount = minRangeAmountMultiple * minAmount;
} else {
minAmount = maxAmount / minRangeAmountMultiple;
}
} else if (minAmount < maxAmount / maxRangeAmountMultiple) {
if (activeThumb === 0) {
maxAmount = maxRangeAmountMultiple * minAmount;
} else {
minAmount = maxAmount / maxRangeAmountMultiple;
}
}
setMaker({
...maker,
minAmount: parseFloat(Number(minAmount).toPrecision(minAmount < 100 ? 2 : 3)),
maxAmount: parseFloat(Number(maxAmount).toPrecision(maxAmount < 100 ? 2 : 3)),
});
};
const handleClickAmountRangeEnabled = function (
_e: React.ChangeEvent<HTMLInputElement>,
checked: boolean,
@ -505,14 +372,13 @@ const MakerForm = ({
return (
fav.type == null ||
(!makerHasAmountRange &&
maker.amount !== '' &&
maker.amount &&
(maker.amount < amountLimits[0] || maker.amount > amountLimits[1])) ||
maker.badPaymentMethod ||
(maker.amount == null && (!makerHasAmountRange || Object.keys(limits).lenght < 1)) ||
(makerHasAmountRange && (minAmountError || maxAmountError)) ||
(!makerHasAmountRange && maker.amount <= 0) ||
(maker.isExplicit && (maker.badSatoshisText !== '' || maker.satoshis === '')) ||
(!maker.isExplicit && maker.badPremiumText !== '') ||
(maker.amount == null && (!makerHasAmountRange || (Object.keys(limits)?.length ?? 0) < 1)) ||
(makerHasAmountRange && hasRangeError) ||
(!makerHasAmountRange && maker.amount && maker.amount <= 0) ||
maker.badPremiumText !== '' ||
federation.getCoordinator(maker.coordinator)?.limits === undefined ||
typeof maker.premium !== 'number' ||
maker.paymentMethods.length === 0
@ -573,15 +439,13 @@ const MakerForm = ({
maker.maxAmount * 100000000,
)}
{' ' + (fav.mode === 'fiat' ? currencyCode : 'Sats')}
{maker.isExplicit
? t(' of {{satoshis}} Satoshis', { satoshis: pn(maker.satoshis) })
: maker.premium === 0
? fav.mode === 'fiat'
? t(' at market price')
: ''
: maker.premium > 0
? t(' at a {{premium}}% premium', { premium: maker.premium })
: t(' at a {{discount}}% discount', { discount: -maker.premium })}
{maker.premium === 0
? fav.mode === 'fiat'
? t(' at market price')
: ''
: maker.premium > 0
? t(' at a {{premium}}% premium', { premium: maker.premium })
: t(' at a {{discount}}% discount', { discount: -maker.premium })}
</Typography>
);
};
@ -696,47 +560,70 @@ const MakerForm = ({
</FormHelperText>
<div style={{ textAlign: 'center' }}>
<ButtonGroup>
<Button
size={maker.advancedOptions ? 'small' : 'large'}
variant='contained'
onClick={() => {
setFav({
...fav,
type: 1,
});
}}
disableElevation={fav.type === 1}
<Box
sx={{
backgroundColor: fav.type === 1 ? 'primary.main' : 'background.paper',
color: fav.type === 1 ? 'background.paper' : 'text.secondary',
':hover': {
color: 'background.paper',
},
boxShadow: fav.type === 1 ? 0 : 3,
display: 'inline-block',
borderBottomLeftRadius: 4,
borderTopLeftRadius: 4,
}}
>
{fav.mode === 'fiat' ? t('Buy') : t('Swap In')}
</Button>
<Button
size={maker.advancedOptions ? 'small' : 'large'}
variant='contained'
onClick={() => {
setFav({
...fav,
type: 0,
});
}}
disableElevation={fav.type === 0}
color='secondary'
<Button
size={maker.advancedOptions ? 'small' : 'large'}
variant='contained'
onClick={() => {
setFav({
...fav,
type: 1,
});
}}
disableElevation={fav.type === 1}
sx={{
backgroundColor:
fav.type === 1 ? 'primary.main' : theme.palette.background.paper,
color:
fav.type === 1 ? theme.palette.background.paper : 'text.secondary',
':hover': {
color: theme.palette.background.paper,
backgroundColor: 'primary.main',
},
}}
>
{fav.mode === 'fiat' ? t('Buy') : t('Swap In')}
</Button>
</Box>
<Box
sx={{
backgroundColor: fav.type === 0 ? 'secondary.main' : 'background.paper',
color: fav.type === 0 ? 'background.secondary' : 'text.secondary',
':hover': {
color: 'background.paper',
},
boxShadow: fav.type === 0 ? 0 : 3,
display: 'inline-block',
borderBottomRightRadius: 4,
borderTopRightRadius: 4,
}}
>
{fav.mode === 'fiat' ? t('Sell') : t('Swap Out')}
</Button>
<Button
size={maker.advancedOptions ? 'small' : 'large'}
variant='contained'
onClick={() => {
setFav({
...fav,
type: 0,
});
}}
color='secondary'
sx={{
boxShadow: 3,
backgroundColor:
fav.type === 0 ? 'secondary.main' : theme.palette.background.paper,
color: fav.type === 0 ? 'background.secondary' : 'text.secondary',
':hover': {
color: theme.palette.background.paper,
backgroundColor: 'secondary.main',
},
}}
>
{fav.mode === 'fiat' ? t('Sell') : t('Swap Out')}
</Button>
</Box>
</ButtonGroup>
</div>
</FormControl>
@ -766,113 +653,96 @@ const MakerForm = ({
</Collapse>
<Collapse in={makerHasAmountRange}>
<AmountRange
minAmount={maker.minAmount}
handleRangeAmountChange={handleRangeAmountChange}
currency={fav.currency}
currencyCode={currencyCode}
handleCurrencyChange={handleCurrencyChange}
amountLimits={amountLimits}
maxAmount={maker.maxAmount}
minAmountError={minAmountError}
maxAmountError={maxAmountError}
handleMinAmountChange={handleMinAmountChange}
handleMaxAmountChange={handleMaxAmountChange}
amountSafeThresholds={amountSafeThresholds}
setHasRangeError={setHasRangeError}
/>
</Collapse>
<Collapse in={!makerHasAmountRange}>
<Grid item>
<Grid container alignItems='stretch' style={{ display: 'flex' }}>
<Grid item xs={fav.mode === 'fiat' ? 6 : 12}>
<Tooltip
placement='top'
enterTouchDelay={500}
enterDelay={700}
enterNextDelay={2000}
title={
fav.mode === 'fiat'
? t('Amount of fiat to exchange for bitcoin')
: t('Amount of BTC to swap for LN Sats')
<Grid container>
<Grid item sx={{ width: fav.mode === 'fiat' ? '50%' : '100%' }}>
<Tooltip
placement='top'
enterTouchDelay={500}
enterDelay={700}
enterNextDelay={2000}
title={
fav.mode === 'fiat'
? t('Amount of fiat to exchange for bitcoin')
: t('Amount of BTC to swap for LN Sats')
}
>
<TextField
fullWidth
disabled={makerHasAmountRange}
variant={makerHasAmountRange ? 'filled' : 'outlined'}
error={
maker.amount !== null &&
(maker.amount < amountLimits[0] || maker.amount > amountLimits[1])
}
>
<TextField
fullWidth
disabled={makerHasAmountRange}
variant={makerHasAmountRange ? 'filled' : 'outlined'}
error={
maker.amount !== '' &&
(maker.amount < amountLimits[0] || maker.amount > amountLimits[1])
}
helperText={
maker.amount < amountLimits[0] && maker.amount !== ''
? t('Must be more than {{minAmount}}', {
minAmount: pn(parseFloat(amountLimits[0].toPrecision(2))),
helperText={
maker.amount && maker.amount < amountLimits[0]
? t('Must be more than {{minAmount}}', {
minAmount: pn(parseFloat(amountLimits[0].toPrecision(2))),
})
: maker.amount && maker.amount > amountLimits[1]
? t('Must be less than {{maxAmount}}', {
maxAmount: pn(parseFloat(amountLimits[1].toPrecision(2))),
})
: maker.amount > amountLimits[1] && maker.amount !== ''
? t('Must be less than {{maxAmount}}', {
maxAmount: pn(parseFloat(amountLimits[1].toPrecision(2))),
})
: null
}
label={amountLabel.label}
required={true}
value={maker.amount}
type='number'
inputProps={{
min: 0,
style: {
textAlign: 'center',
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
},
}}
onChange={(e) => {
setMaker({ ...maker, amount: e.target.value });
}}
/>
</Tooltip>
{fav.mode === 'swap' && maker.amount !== '' ? (
<FormHelperText sx={{ textAlign: 'center' }}>
{amountLabel.helper}
</FormHelperText>
) : null}
</Grid>
{fav.mode === 'fiat' ? (
<Grid item xs={6}>
<Select
fullWidth
sx={{
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
}}
required={true}
inputProps={{
style: { textAlign: 'center' },
}}
value={fav.currency === 0 ? 1 : fav.currency}
onChange={(e) => {
handleCurrencyChange(e.target.value);
}}
>
{Object.entries(currencyDict).map(([key, value]) => (
<MenuItem key={key} value={parseInt(key)}>
<div
style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap' }}
>
<FlagWithProps code={value} />
{' ' + value}
</div>
</MenuItem>
))}
</Select>
</Grid>
: null
}
label={amountLabel.label}
required={true}
value={maker.amount}
type='number'
onChange={(e) => {
setMaker({ ...maker, amount: Number(e.target.value) });
}}
/>
</Tooltip>
{fav.mode === 'swap' && maker.amount ? (
<FormHelperText sx={{ textAlign: 'center' }}>
{amountLabel.helper}
</FormHelperText>
) : null}
</Grid>
{fav.mode === 'fiat' ? (
<Grid item sx={{ width: '50%' }}>
<Select
fullWidth
sx={{
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
}}
required={true}
inputProps={{
style: { textAlign: 'center' },
}}
value={fav.currency === 0 ? 1 : fav.currency}
onChange={(e) => {
handleCurrencyChange(e.target.value);
}}
>
{Object.entries(currencyDict).map(([key, value]) => (
<MenuItem key={key} value={parseInt(key)}>
<div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap' }}>
<FlagWithProps code={value} />
{' ' + value}
</div>
</MenuItem>
))}
</Select>
</Grid>
) : null}
</Grid>
</Collapse>
</Grid>
<Grid item xs={12}>
<Grid item sx={{ width: '100%' }}>
<AutocompletePayments
onAutocompleteChange={handlePaymentMethodChange}
onClick={() => {
@ -927,8 +797,98 @@ const MakerForm = ({
</Grid>
)}
{!maker.advancedOptions && pricingMethods ? (
<Grid item xs={12}>
<Grid item sx={{ width: '100%' }}>
<TextField
fullWidth
error={maker.badPremiumText !== ''}
helperText={maker.badPremiumText === '' ? null : maker.badPremiumText}
label={`${t('Premium over Market (%)')} *`}
type='number'
value={maker.premium}
inputProps={{
min: -100,
max: 999,
style: {
textAlign: 'center',
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
},
}}
onChange={handlePremiumChange}
/>
</Grid>
<Collapse in={maker.advancedOptions} sx={{ width: '100%' }}>
<Grid item sx={{ width: '100%' }}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<MobileTimePicker
ampm={false}
localeText={{ timePickerToolbarTitle: t('Public order length') }}
openTo='hours'
views={['hours', 'minutes']}
inputFormat='HH:mm'
mask='__:__'
slotProps={{
textField: {
fullWidth: true,
InputProps: {
style: {
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
marginBottom: 8,
},
endAdornment: (
<InputAdornment position='end'>
<HourglassTop />
</InputAdornment>
),
},
},
}}
label={t('Public Duration (HH:mm)')}
value={maker.publicExpiryTime}
onChange={handleChangePublicDuration}
minTime={new Date(0, 0, 0, 0, 10)}
maxTime={new Date(0, 0, 0, 23, 59)}
/>
</LocalizationProvider>
</Grid>
<Grid item sx={{ width: '100%' }}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<MobileTimePicker
ampm={false}
localeText={{ timePickerToolbarTitle: t('Escrow/invoice step length') }}
openTo='hours'
views={['hours', 'minutes']}
inputFormat='HH:mm'
mask='__:__'
slotProps={{
textField: {
fullWidth: true,
InputProps: {
style: {
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
marginBottom: 8,
},
endAdornment: (
<InputAdornment position='end'>
<HourglassTop />
</InputAdornment>
),
},
},
}}
label={t('Escrow/Invoice Timer (HH:mm)')}
value={maker.escrowExpiryTime}
onChange={handleChangeEscrowDuration}
minTime={new Date(0, 0, 0, 1, 0)}
maxTime={new Date(0, 0, 0, 8, 0)}
/>
</LocalizationProvider>
</Grid>
<Grid item sx={{ width: '100%', marginBottom: '8px' }}>
<Box
sx={{
padding: '0.5em',
@ -941,232 +901,61 @@ const MakerForm = ({
},
}}
>
<FormControl component='fieldset'>
<FormHelperText sx={{ textAlign: 'center', position: 'relative', top: '0.2em' }}>
{t('Choose a Pricing Method')}
</FormHelperText>
<RadioGroup row defaultValue='relative'>
<Tooltip
placement='top'
enterTouchDelay={0}
enterDelay={1000}
enterNextDelay={2000}
title={t('Let the price move with the market')}
>
<FormControlLabel
value='relative'
control={<Radio color='primary' />}
label={t('Relative')}
labelPlacement='end'
onClick={handleClickRelative}
/>
</Tooltip>
<Tooltip
placement='top'
enterTouchDelay={0}
enterDelay={1000}
enterNextDelay={2000}
title={t('Set a fix amount of satoshis')}
>
<FormControlLabel
disabled={maker.advancedOptions}
value='explicit'
control={<Radio color='secondary' />}
label={t('Exact')}
labelPlacement='end'
onClick={handleClickExplicit}
/>
</Tooltip>
</RadioGroup>
</FormControl>
</Box>
</Grid>
) : null}
<Grid item xs={12}>
<div style={{ display: maker.isExplicit ? '' : 'none' }}>
<TextField
fullWidth
label={t('Satoshis')}
error={maker.badSatoshisText !== ''}
helperText={maker.badSatoshisText === '' ? null : maker.badSatoshisText}
type='number'
required={true}
value={maker.satoshis}
inputProps={{
min: satoshisLimits[0],
max: satoshisLimits[1],
style: {
textAlign: 'center',
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
},
}}
onChange={handleSatoshisChange}
/>
</div>
<div style={{ display: maker.isExplicit ? 'none' : '' }}>
<TextField
fullWidth
error={maker.badPremiumText !== ''}
helperText={maker.badPremiumText === '' ? null : maker.badPremiumText}
label={`${t('Premium over Market (%)')} *`}
type='number'
value={maker.premium}
inputProps={{
min: -100,
max: 999,
style: {
textAlign: 'center',
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
},
}}
onChange={handlePremiumChange}
/>
</div>
</Grid>
<Grid item>
<Collapse in={maker.advancedOptions}>
<Grid container spacing={1}>
<Grid item xs={12}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<MobileTimePicker
ampm={false}
localeText={{ timePickerToolbarTitle: t('Public order length') }}
openTo='hours'
views={['hours', 'minutes']}
inputFormat='HH:mm'
mask='__:__'
slotProps={{
textField: {
InputProps: {
style: {
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
},
endAdornment: (
<InputAdornment position='end'>
<HourglassTop />
</InputAdornment>
),
},
},
}}
label={t('Public Duration (HH:mm)')}
value={maker.publicExpiryTime}
onChange={handleChangePublicDuration}
minTime={new Date(0, 0, 0, 0, 10)}
maxTime={new Date(0, 0, 0, 23, 59)}
/>
</LocalizationProvider>
</Grid>
<Grid item xs={12}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<MobileTimePicker
ampm={false}
localeText={{ timePickerToolbarTitle: t('Escrow/invoice step length') }}
openTo='hours'
views={['hours', 'minutes']}
inputFormat='HH:mm'
mask='__:__'
slotProps={{
textField: {
InputProps: {
style: {
backgroundColor: theme.palette.background.paper,
borderRadius: '4px',
},
endAdornment: (
<InputAdornment position='end'>
<HourglassTop />
</InputAdornment>
),
},
},
}}
label={t('Escrow/Invoice Timer (HH:mm)')}
value={maker.escrowExpiryTime}
onChange={handleChangeEscrowDuration}
minTime={new Date(0, 0, 0, 1, 0)}
maxTime={new Date(0, 0, 0, 8, 0)}
/>
</LocalizationProvider>
</Grid>
<Grid item xs={12}>
<Box
<Grid container direction='column' alignItems='center' spacing={0.5}>
<Grid
item
sx={{
padding: '0.5em',
backgroundColor: 'background.paper',
border: '1px solid',
borderRadius: '4px',
borderColor: theme.palette.mode === 'dark' ? '#434343' : '#c4c4c4',
'&:hover': {
borderColor: theme.palette.mode === 'dark' ? '#ffffff' : '#2f2f2f',
},
width: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
flexWrap: 'wrap',
}}
>
<Grid container direction='column' alignItems='center' spacing={0.5}>
<Grid
item
<Tooltip
enterDelay={800}
enterTouchDelay={0}
placement='top'
title={t('Set the skin-in-the-game, increase for higher safety assurance')}
>
<Typography
variant='caption'
sx={{
width: '100%',
color: 'text.secondary',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
flexWrap: 'wrap',
}}
>
<Tooltip
enterDelay={800}
enterTouchDelay={0}
placement='top'
title={t(
'Set the skin-in-the-game, increase for higher safety assurance',
)}
>
<Typography
variant='caption'
sx={{
color: 'text.secondary',
display: 'flex',
flexWrap: 'wrap',
}}
>
{t('Fidelity Bond Size')}{' '}
<Lock sx={{ height: '0.8em', width: '0.8em' }} />
</Typography>
</Tooltip>
</Grid>
<Grid item sx={{ width: 'calc(100% - 2em)' }}>
<Slider
sx={{ width: '100%', align: 'center' }}
aria-label='Bond Size (%)'
defaultValue={3}
value={maker.bondSize}
valueLabelDisplay='auto'
valueLabelFormat={(x: string) => x + '%'}
step={0.25}
marks={[
{ value: 2, label: '2%' },
{ value: 5, label: '5%' },
{ value: 10, label: '10%' },
{ value: 15, label: '15%' },
]}
min={2}
max={15}
onChange={(e) => {
setMaker({ ...maker, bondSize: e.target.value });
}}
/>
</Grid>
</Grid>
</Box>
{t('Fidelity Bond Size')} <Lock sx={{ height: '0.8em', width: '0.8em' }} />
</Typography>
</Tooltip>
</Grid>
<Grid item sx={{ width: 'calc(100% - 2em)' }}>
<Slider
sx={{ width: '100%', align: 'center' }}
aria-label='Bond Size (%)'
defaultValue={3}
value={maker.bondSize}
valueLabelDisplay='auto'
valueLabelFormat={(x: string) => x + '%'}
step={0.25}
marks={[
{ value: 2, label: '2%' },
{ value: 5, label: '5%' },
{ value: 10, label: '10%' },
{ value: 15, label: '15%' },
]}
min={2}
max={15}
onChange={(e) => {
setMaker({ ...maker, bondSize: e.target.value });
}}
/>
</Grid>
</Grid>
</Grid>
</Collapse>
</Grid>
</Box>
</Grid>
</Collapse>
</Grid>
</Collapse>
@ -1180,7 +969,7 @@ const MakerForm = ({
/>
<Grid container direction='column' alignItems='center'>
<Grid item>
<Grid item sx={{ marginBottom: '8px', marginTop: '8px' }}>
<SummaryText />
</Grid>
@ -1239,15 +1028,10 @@ const MakerForm = ({
enterTouchDelay={0}
enterDelay={1000}
enterNextDelay={2000}
title={
maker.isExplicit
? t('Your order fixed exchange rate')
: t("Your order's current exchange rate. Rate will move with the market.")
}
title={t("Your order's current exchange rate. Rate will move with the market.")}
>
<Typography align='center' variant='caption' color='text.secondary'>
{(maker.isExplicit ? t('Order rate:') : t('Order current rate:')) +
` ${pn(currentPrice)} ${currencyCode}/BTC`}
{`${t('Order current rate:')} ${currentPrice ?? '-'} ${currencyCode}/BTC`}
</Typography>
</Tooltip>
</Collapse>

View File

@ -76,13 +76,13 @@ const SelectCoordinator: React.FC<SelectCoordinatorProps> = ({
<Grid container style={{ marginTop: 10 }}>
<Grid
item
xs={3}
sx={{
cursor: 'pointer',
position: 'relative',
left: '0.3em',
bottom: '0.1em',
marginBottom: 1,
width: '30%',
}}
onClick={() => {
onClickCurrentCoordinator(coordinatorAlias);
@ -108,13 +108,16 @@ const SelectCoordinator: React.FC<SelectCoordinatorProps> = ({
</Grid>
</Grid>
<Grid item xs={9}>
<Grid item>
<Select
variant='standard'
fullWidth
required={true}
inputProps={{
style: { textAlign: 'center' },
style: {
textAlign: 'center',
width: '70%',
},
}}
value={coordinatorAlias}
onChange={handleCoordinatorChange}

View File

@ -4,7 +4,7 @@ export interface Maker {
advancedOptions: boolean;
coordinator: string;
isExplicit: boolean;
amount: string;
amount: number | null;
paymentMethods: string[];
paymentMethodsText: string;
badPaymentMethod: boolean;
@ -15,8 +15,8 @@ export interface Maker {
escrowExpiryTime: Date;
escrowDuration: number;
bondSize: number;
minAmount: string;
maxAmount: string;
minAmount: number | null;
maxAmount: number | null;
badSatoshisText: string;
badPremiumText: string;
latitude: number;
@ -30,7 +30,7 @@ export const defaultMaker: Maker = {
Math.floor(Math.random() * Object.keys(defaultFederation).length)
] ?? '',
isExplicit: false,
amount: '',
amount: null,
paymentMethods: [],
paymentMethodsText: 'not specified',
badPaymentMethod: false,
@ -41,8 +41,8 @@ export const defaultMaker: Maker = {
escrowExpiryTime: new Date(0, 0, 0, 3, 0),
escrowDuration: 10800,
bondSize: 3,
minAmount: '',
maxAmount: '',
minAmount: null,
maxAmount: null,
badPremiumText: '',
badSatoshisText: '',
latitude: 0,

View File

@ -61,7 +61,7 @@ class Order {
expires_at: Date = new Date();
type: number = 0;
currency: number = 0;
amount: number = 0;
amount: number | null = null;
has_range: boolean = false;
min_amount: number = 0;
max_amount: number = 0;

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " amb descompte del {{discount}}%",
" at a {{premium}}% premium": " amb una prima del {{premium}}%",
" at market price": " a preu de mercat",
" of {{satoshis}} Satoshis": " de {{satoshis}} Sats",
"Add New": "Afegir nou",
"Add geolocation for a face to face trade": "Afegeix geolocalització per a un intercanvi cara a cara",
"Amount Range": "Interval de la quantitat",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Quantitat de fiat a canviar per bitcoin",
"Buy BTC for ": "Compra BTC per ",
"Buy or Sell Bitcoin?": "Comprar o Vendre Bitcoin?",
"Choose a Pricing Method": "Tria com establir el preu",
"Clear form": "Esborrar camps",
"Edit order": "Editar ordre",
"Enable advanced options": "Habilitar opcions avançades",
"Enter the destination of the Lightning swap": "Introduïu l'adreça destí de l'intercanvi Lightning",
"Escrow/Invoice Timer (HH:mm)": "Temporitzador Dipòsit/Factura(HH:mm)",
"Escrow/invoice step length": "Longitud passos Dipòsit/Factura",
"Exact": "Exacte",
"Exact Amount": "Quantitat Exacte",
"Face to Face Location": "Ubicació del cara cara",
"Fiat Payment Method(s)": "Mètode(s) de Pagament Fiat",
"Fidelity Bond Size": "Grandària de la fiança",
"In or Out of Lightning?": "Introduir o Treure de Lightning?",
"Let the price move with the market": "El preu es mourà relatiu al mercat",
"Must be less than {{maxAmount}}": "Ha de ser menys de {{maxAmount}}",
"Must be less than {{maxSats}": "Ha de ser menys de {{maxSats}}",
"Must be less than {{max}}%": "Ha de ser menys del {{max}}%",
"Must be more than {{minAmount}}": "Ha de ser més de {{minAmount}}",
"Must be more than {{minSats}}": "Ha de ser més de {{minSats}}",
"Must be more than {{min}}%": "Ha de ser més del {{min}}%",
"Must be shorter than 65 characters": "Ha de tenir menys de 65 caràcters",
"Onchain amount to receive (BTC)": "Quantitat a rebre Onchain (BTC)",
"Onchain amount to send (BTC)": "Quantitat a enviar Onchain (BTC)",
"Order current rate:": "Preu actual:",
"Order for ": "Ordre per ",
"Order rate:": "Taxa de l'ordre:",
"Premium over Market (%)": "Prima sobre el mercat (%)",
"Public Duration (HH:mm)": "Duració pública (HH:mm)",
"Public order length": "Duració de l'ordre pública",
"Relative": "Relatiu",
"Satoshis": "Satoshis",
"Sell BTC for ": "Ven BTC per ",
"Set a fix amount of satoshis": "Estableix una suma fixa de Sats",
"Set the skin-in-the-game, increase for higher safety assurance": "Estableix la implicació requerida (augmentar per a més seguretat)",
"Swap Destination(s)": "Destí(ns) del Swap",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Has d'omplir el formulari correctament",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Reps aprox. {{swapSats}} LN Sats (les taxes poden variar)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Envies aprox. {{swapSats}} LN Sats (les taxes poden variar)",
"Your order fixed exchange rate": "La tasa de canvi fixa de la teva ordre",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Creador",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " za {{discount}}% slevu",
" at a {{premium}}% premium": " za {{premium}}% přirážku",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " {{satoshis}} Satoshi",
"Add New": "Přidat",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Částka fiat měny za bitcoin",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "Nákup nebo prodej Bitcoinu?",
"Choose a Pricing Method": "Vyber metodu stanovení ceny",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Možnosti fiat plateb",
"Fidelity Bond Size": "Velikost kauce",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Nech cenu pohybovat se s trhem",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "Musí být méně než {{maxSats}}",
"Must be less than {{max}}%": "Musí být méně než {{max}}%",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "Musí být více než {{minSats}}",
"Must be more than {{min}}%": "Musí být více než {{min}}%",
"Must be shorter than 65 characters": "Maximálně 65 znaků",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "Aktuální kurz nabídky:",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "Prémium vůči tržní ceně (%)",
"Public Duration (HH:mm)": "Doba zveřejnění (HH:mm)",
"Public order length": "Public order length",
"Relative": "Plovoucí",
"Satoshis": "Satoshi",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "Nastavit fixní částku satoshi ",
"Set the skin-in-the-game, increase for higher safety assurance": "Nastavení kauce, zvyš pro vyšší bezpečnost ",
"Swap Destination(s)": "Swap adresa",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Pevný směnný kurz tvé nabídky",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Tvůrce",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " mit einem {{discount}}% Rabatt",
" at a {{premium}}% premium": " mit einem {{premium}}% Aufschlag",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " für {{satoshis}} Satoshis",
"Add New": "Neu hinzufügen",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Fiat-Betrag zum Austausch in Bitcoin",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "Bitcoin kaufen oder verkaufen?",
"Choose a Pricing Method": "Wähle eine Preismethode",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Fiat Zahlungsmethode(n)",
"Fidelity Bond Size": "Höhe der Kaution",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Passe den Preis konstant dem Markt an",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "Muss weniger sein als {{maxSats}}",
"Must be less than {{max}}%": "Muss weniger sein als {{max}}%",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "Muss mehr sein als {{minSats}}",
"Must be more than {{min}}%": "Muss mehr sein als {{min}}%",
"Must be shorter than 65 characters": "Muss kürzer als 65 Zeichen sein",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "Aktueller Order-Kurs:",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "Marktpreis Aufschlag (%)",
"Public Duration (HH:mm)": "Angebotslaufzeit (HH:mm)",
"Public order length": "Public order length",
"Relative": "Relativ",
"Satoshis": "Satoshis",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "Setze eine feste Anzahl an Satoshis",
"Set the skin-in-the-game, increase for higher safety assurance": "Lege die Kaution fest, erhöhen für mehr Sicherheit",
"Swap Destination(s)": "austausch Ziel(e)",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Dein fixierter Order-Kurs",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " at a {{discount}}% discount",
" at a {{premium}}% premium": " at a {{premium}}% premium",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " of {{satoshis}} Satoshis",
"Add New": "Add New",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Amount of fiat to exchange for bitcoin",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "Buy or Sell Bitcoin?",
"Choose a Pricing Method": "Choose a Pricing Method",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Fiat Payment Method(s)",
"Fidelity Bond Size": "Fidelity Bond Size",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Let the price move with the market",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "Must be less than {{maxSats}}",
"Must be less than {{max}}%": "Must be less than {{max}}%",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "Must be more than {{minSats}}",
"Must be more than {{min}}%": "Must be more than {{min}}%",
"Must be shorter than 65 characters": "Must be shorter than 65 characters",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "Order current rate:",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "Premium over Market (%)",
"Public Duration (HH:mm)": "Public Duration (HH:mm)",
"Public order length": "Public order length",
"Relative": "Relative",
"Satoshis": "Satoshis",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "Set a fix amount of satoshis",
"Set the skin-in-the-game, increase for higher safety assurance": "Set the skin-in-the-game, increase for higher safety assurance",
"Swap Destination(s)": "Swap Destination(s)",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Your order fixed exchange rate",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " con descuento del {{discount}}%",
" at a {{premium}}% premium": " con una prima del {{premium}}%",
" at market price": " a precio de mercado",
" of {{satoshis}} Satoshis": " de {{satoshis}} Sats",
"Add New": "Añadir nuevo",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Cantidad de fiat a cambiar por bitcoin",
"Buy BTC for ": "Comprar BTC por ",
"Buy or Sell Bitcoin?": "¿Comprar o vender bitcoin?",
"Choose a Pricing Method": "Elige cómo establecer el precio",
"Clear form": "Borrar campos",
"Edit order": "Editar orden",
"Enable advanced options": "Activar opciones avanzadas",
"Enter the destination of the Lightning swap": "Indique el destino del intercambio Lightning",
"Escrow/Invoice Timer (HH:mm)": "Plazo depósito/factura (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exacto",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Método(s) de pago en fiat",
"Fidelity Bond Size": "Tamaño de la fianza",
"In or Out of Lightning?": "¿Hacia o desde Lightning?",
"Let the price move with the market": "Deja que el precio se mueva con el mercado",
"Must be less than {{maxAmount}}": "Debe ser menos de {{maxAmount}}",
"Must be less than {{maxSats}": "Debe ser menos de {{maxSats}}",
"Must be less than {{max}}%": "Debe ser menos del {{max}}%",
"Must be more than {{minAmount}}": "Debe ser más de {{minAmount}}",
"Must be more than {{minSats}}": "Debe ser más de {{minSats}}",
"Must be more than {{min}}%": "Debe ser más del {{min}}%",
"Must be shorter than 65 characters": "Debe tener menos de 65 carácteres",
"Onchain amount to receive (BTC)": "Cantidad onchain a recibir (BTC)",
"Onchain amount to send (BTC)": "Cantidad onchain a enviar (BTC)",
"Order current rate:": "Precio actual:",
"Order for ": "Orden por ",
"Order rate:": "Ratio de la orden:",
"Premium over Market (%)": "Prima sobre el mercado (%)",
"Public Duration (HH:mm)": "Duración pública (HH:mm)",
"Public order length": "Public order length",
"Relative": "Relativo",
"Satoshis": "Satoshis",
"Sell BTC for ": "Vender BTC por ",
"Set a fix amount of satoshis": "Establece una cantidad fija de Sats",
"Set the skin-in-the-game, increase for higher safety assurance": "Establece la implicación requerida (aumentar para mayor seguridad)",
"Swap Destination(s)": "Destino(s) del swap",
"Swap into LN ": "Swap hacia LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Rellene correctamente el formulario",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Recibes aproximadamente {{swapSats}} LN Sats (la comisión puede variar)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Envías aproximadamente {{swapSats}} LN Sats (la comisión puede variar)",
"Your order fixed exchange rate": "La tasa de cambio fija de tu orden",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Creador",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " %{{discount}}-ko deskontuarekin",
" at a {{premium}}% premium": " %{{premium}}-ko primarekin",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " {{satoshis}} Satoshirentzat",
"Add New": "Gehitu Berria",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Bitcoingatik aldatzeko fiat kopurua",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "Bitcoin Erosi ala Saldu?",
"Choose a Pricing Method": "Aukeratu prezioa nola ezarri",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Fiat Ordainketa Modua(k)",
"Fidelity Bond Size": "Fidantzaren tamaina",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Prezioa merkatuarekin mugituko da",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "{{maxSats}} baino gutxiago izan behar da",
"Must be less than {{max}}%": "%{{max}} baino gutxiago izan behar da",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "{{minSats}} baino gehiago izan behar da",
"Must be more than {{min}}%": "%{{min}} baino gehiago izan behar da",
"Must be shorter than 65 characters": "65 karaktere baino gutxiago izan behar ditu",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "Uneko Prezioa:",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "Merkatuarekiko Prima (%)",
"Public Duration (HH:mm)": "Iraupen publikoa (HH:mm)",
"Public order length": "Public order length",
"Relative": "Erlatiboa",
"Satoshis": "Satoshiak",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "Satoshi kopuru finko bat ezarri",
"Set the skin-in-the-game, increase for higher safety assurance": "Inplikazio maila finkatu, handitu segurtasun gehiago izateko",
"Swap Destination(s)": "Trukearen Norakoa(k)",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Zure eskaeraren kanbio-tasa finkoa",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Egile",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " à une remise de {{discount}}%",
" at a {{premium}}% premium": " à une prime de {{premium}}%",
" at market price": " au prix du marché",
" of {{satoshis}} Satoshis": " de {{satoshis}} Satoshis",
"Add New": "Ajouter nouveau",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Montant Plage",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Montant de fiat à échanger contre bitcoin",
"Buy BTC for ": "Acheter BTC pour ",
"Buy or Sell Bitcoin?": "Acheter ou vendre bitcoin?",
"Choose a Pricing Method": "Choisir un mode de tarification",
"Clear form": "Effacer formulaire",
"Edit order": "Editer l'ordre",
"Enable advanced options": "Activer les options avancées",
"Enter the destination of the Lightning swap": "Saisir la destination de l'échange Lightning",
"Escrow/Invoice Timer (HH:mm)": "Minuterie de dépôt de garantie/facture (HH:mm)",
"Escrow/invoice step length": "Longueur de l'étape de dépôt fiduciaire/facture",
"Exact": "Exact",
"Exact Amount": "Montant exact",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Mode(s) de paiement Fiat",
"Fidelity Bond Size": "Taille de la garantie de fidélité",
"In or Out of Lightning?": "Entrer ou sortir du Lightning?",
"Let the price move with the market": "Laisser le prix évoluer avec le marché",
"Must be less than {{maxAmount}}": "Doit être moins de {{maxAmount}}",
"Must be less than {{maxSats}": "Doit être moins de {{maxSats}}",
"Must be less than {{max}}%": "Doit être moins de {{max}}%",
"Must be more than {{minAmount}}": "Doit être plus que {{minAmount}}",
"Must be more than {{minSats}}": "Doit être plus que {{minSats}}",
"Must be more than {{min}}%": "Doit être plus que {{min}}%",
"Must be shorter than 65 characters": "Doit être plus court que 65 caractères",
"Onchain amount to receive (BTC)": "Onchain montant à recevoir (BTC)",
"Onchain amount to send (BTC)": "Onchain montant à envoyer (BTC)",
"Order current rate:": "Commander le taux actuel:",
"Order for ": "Ordre pour ",
"Order rate:": "Taux d'ordre:",
"Premium over Market (%)": "Prime sur le marché (%)",
"Public Duration (HH:mm)": "Durée publique (HH:mm)",
"Public order length": "Durée de l'ordre public",
"Relative": "Relative",
"Satoshis": "Satoshis",
"Sell BTC for ": "Vends BTC pour ",
"Set a fix amount of satoshis": "Fixer un montant fixe de satoshis",
"Set the skin-in-the-game, increase for higher safety assurance": "Définissez la peau en jeu, augmentez pour une meilleure assurance de sécurité",
"Swap Destination(s)": "Destination(s) de l'échange",
"Swap into LN ": "Échanger dans LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Vous devez remplir le formulaire correctement",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Vous recevez environ {{swapSats}} LN Sats (les frais peuvent varier).",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Vous envoyez environ {{swapSats}} LN Sats (les frais peuvent varier)",
"Your order fixed exchange rate": "Taux de change fixe de votre commande",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Auteur",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " con uno sconto del {{discount}}%",
" at a {{premium}}% premium": " con un premio del {{premium}}%",
" at market price": " al prezzo di mercato",
" of {{satoshis}} Satoshis": " di {{satoshis}} Sats",
"Add New": "Aggiungi nuovo",
"Add geolocation for a face to face trade": "Aggiungi la geolocalizzazione per uno scambio faccia a faccia",
"Amount Range": "Intervallo di quantità",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Quantità fiat da cambiare in bitcoin",
"Buy BTC for ": "Compra BTC per ",
"Buy or Sell Bitcoin?": "Compri o Vendi Bitcoin?",
"Choose a Pricing Method": "Scegli come stabilire il prezzo",
"Clear form": "Pulisci form",
"Edit order": "Modifica ordine",
"Enable advanced options": "Abilita opzioni avanzate",
"Enter the destination of the Lightning swap": "Inserisci la destinazione dello swap Lightning",
"Escrow/Invoice Timer (HH:mm)": "Deposito/Timer della fattura (HH:mm)",
"Escrow/invoice step length": "Deposito/durata dello step della fattura",
"Exact": "Esatto",
"Exact Amount": "Importo esatto",
"Face to Face Location": "Luogo per scambio Faccia a Faccia",
"Fiat Payment Method(s)": "Metodo(i) di pagamento fiat",
"Fidelity Bond Size": "Ammontare della cauzione",
"In or Out of Lightning?": "Dentro o fuori da Lightning?",
"Let the price move with the market": "Lascia che il prezzo si muova col mercato",
"Must be less than {{maxAmount}}": "Deve essere inferiore a {{maxAmount}}",
"Must be less than {{maxSats}": "Dev'essere inferiore al {{maxSats}}",
"Must be less than {{max}}%": "Dev'essere inferiore al {{max}}%",
"Must be more than {{minAmount}}": "Deve essere maggiore a {{minAmount}}",
"Must be more than {{minSats}}": "Dev'essere maggiore del {{minSats}}",
"Must be more than {{min}}%": "Dev'essere maggiore del {{min}}%",
"Must be shorter than 65 characters": "Deve essere meno di 65 caratteri",
"Onchain amount to receive (BTC)": "Importo da ricevere onchain (BTC)",
"Onchain amount to send (BTC)": "Importo da inviare onchain (BTC)",
"Order current rate:": "Ordina al prezzo corrente:",
"Order for ": "Ordina per ",
"Order rate:": "Tasso di ordinazione:",
"Premium over Market (%)": "Premio sul prezzo di mercato (%)",
"Public Duration (HH:mm)": "Durata pubblica (HH:mm)",
"Public order length": "Durata dell'ordine pubblico",
"Relative": "Relativo",
"Satoshis": "Satoshi",
"Sell BTC for ": "Vendi BTC per ",
"Set a fix amount of satoshis": "Imposta una somma fissa di Sats",
"Set the skin-in-the-game, increase for higher safety assurance": "Stabilisci la posta in gioco, aumenta per una sicurezza maggiore",
"Swap Destination(s)": "Destinazione dello/degli Swap",
"Swap into LN ": "Swap su LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Devi compilare il form correttamente",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Riceverai circa {{swapSats}} Sats su LN (le commissioni possono variare)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Invierai circa {{swapSats}} LN Sats (le commissioni possono variare)",
"Your order fixed exchange rate": "Il tasso di cambio fisso del tuo ordine",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": "{{discount}}%のディスカウントで",
" at a {{premium}}% premium": "{{premium}}%のプレミアムで",
" at market price": " at market price",
" of {{satoshis}} Satoshis": "{{satoshis}}のうち",
"Add New": "新しく追加",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "ビットコインと交換するための通貨の金額",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "ビットコインを買う? 売る?",
"Choose a Pricing Method": "価格設定方法を選択してください。",
"Clear form": "フォームをクリア",
"Edit order": "注文を編集",
"Enable advanced options": "高度な設定を有効にする",
"Enter the destination of the Lightning swap": "ライトニングスワップの送信先を入力してください。",
"Escrow/Invoice Timer (HH:mm)": "エスクロー/インボイスのタイマー(HH:mm)",
"Escrow/invoice step length": "エスクロー/インボイスのステップ期間",
"Exact": "正確",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "支払い方法",
"Fidelity Bond Size": "信用担保金のサイズ",
"In or Out of Lightning?": "ライトニングに入れる?出す?",
"Let the price move with the market": "価格を市場と連動させます。",
"Must be less than {{maxAmount}}": "{{maxAmount}}未満である必要があります。",
"Must be less than {{maxSats}": " {{maxSats}}未満である必要があります。",
"Must be less than {{max}}%": " {{max}}%未満である必要があります。",
"Must be more than {{minAmount}}": "{{minAmount}}以上である必要があります。",
"Must be more than {{minSats}}": "{{minSats}}以上である必要があります。",
"Must be more than {{min}}%": "{{min}}%以上である必要があります。",
"Must be shorter than 65 characters": "65文字より短くなければなりません。",
"Onchain amount to receive (BTC)": "受信するオンチェーン量BTC",
"Onchain amount to send (BTC)": "送信するオンチェーン量BTC",
"Order current rate:": "現在のレート:",
"Order for ": "Order for ",
"Order rate:": "注文レート:",
"Premium over Market (%)": "マーケットに対するプレミアム(%)",
"Public Duration (HH:mm)": "公開期間(HH:mm)",
"Public order length": "公開注文の期間",
"Relative": "相対的",
"Satoshis": "Sats",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "固定数量のSatsを設定します。",
"Set the skin-in-the-game, increase for higher safety assurance": "スキンインゲームを設定して、安全性を高めるために増やす。",
"Swap Destination(s)": "スワップの送信先",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "フォームに正しく入力する必要があります。",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "約{{swapSats}} ライトニングSatsを受け取ります手数料は異なる場合があります",
"You send approx {{swapSats}} LN Sats (fees might vary)": "約{{swapSats}} ライトニングSatsを送信します手数料は異なる場合があります",
"Your order fixed exchange rate": "注文の固定為替レート",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "メーカー",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " o godz {{discount}}% zniżka",
" at a {{premium}}% premium": " o godz {{premium}}% premia",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " z {{satoshis}} Satoshis",
"Add New": "Dodaj nowe",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Kwota fiat do wymiany na bitcoin",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "Chcesz kupić lub sprzedać Bitcoin?",
"Choose a Pricing Method": "Wybierz metodę ustalania cen",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Fiat Metoda/Metody płatności",
"Fidelity Bond Size": "Rozmiar obligacji wierności",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Niech cena porusza się wraz z rynkiem",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "To musi być mniej niż {{maxSats}}",
"Must be less than {{max}}%": "To musi być mniejsza niż {{max}}%",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "To musi być więcej niż {{minSats}}",
"Must be more than {{min}}%": "To musi być więcej niż {{min}}%",
"Must be shorter than 65 characters": "Musi być krótszy niż 65 znaków",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "Order current rate:",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "Premia nad rynkiem (%)",
"Public Duration (HH:mm)": "Czas trwania publicznego (HH:mm)",
"Public order length": "Public order length",
"Relative": "Względny",
"Satoshis": "Satoshis",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "Ustaw stałą ilość satoshi",
"Set the skin-in-the-game, increase for higher safety assurance": "Ustaw skin-in-the-game, zwiększ, aby zapewnić większe bezpieczeństwo",
"Swap Destination(s)": "Swap miejsce/miejsca docelowe",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Your order fixed exchange rate",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " com um desconto de {{discount}}%",
" at a {{premium}}% premium": " com um prêmio de {{premium}}%",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " de {{satoshis}} Satoshis",
"Add New": "Adicionar novo",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Faixa de valor",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Quantidade de moeda fiduciária(fiat) para trocar por bitcoin",
"Buy BTC for ": "Comprar BTC por ",
"Buy or Sell Bitcoin?": "Comprar ou vender Bitcoin?",
"Choose a Pricing Method": "Escolha um método de precificação",
"Clear form": "Limpar formulário",
"Edit order": "Editar ordem",
"Enable advanced options": "Habilitar opções avançadas",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exato",
"Exact Amount": "Valor Exato",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Forma(s) de Pagamento Fiat",
"Fidelity Bond Size": "Tamanho do título de fidelidade",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Deixe o preço se mover com o mercado",
"Must be less than {{maxAmount}}": "Deve ser inferior a {{maxAmount}}",
"Must be less than {{maxSats}": "Deve ser inferior a {{maxSats}}",
"Must be less than {{max}}%": "Deve ser inferior a {{max}}%",
"Must be more than {{minAmount}}": "Deve ser superior a {{minAmount}}",
"Must be more than {{minSats}}": "Deve ser superior a {{minSats}}",
"Must be more than {{min}}%": "Deve ser superior a {{min}}%",
"Must be shorter than 65 characters": "Deve ter menos de 65 caracteres",
"Onchain amount to receive (BTC)": "Valor onchain a receber (BTC)",
"Onchain amount to send (BTC)": "Valor onchain a enviar (BTC)",
"Order current rate:": "Taxa atual do pedido:",
"Order for ": "Ordem para ",
"Order rate:": "Taxa da ordem:",
"Premium over Market (%)": "Prêmio sobre o mercado (%)",
"Public Duration (HH:mm)": "Duração Pública (HH:mm)",
"Public order length": "Tempo da ordem pública",
"Relative": "Relativo",
"Satoshis": "Satoshis",
"Sell BTC for ": "Vender BTC por ",
"Set a fix amount of satoshis": "Defina uma quantidade fixa de satoshis",
"Set the skin-in-the-game, increase for higher safety assurance": "Defina a skin-in-the-game(pele em risco), aumente para maior garantia de segurança",
"Swap Destination(s)": "Trocar Destino(s)",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Você deve preencher o formulário corretamente",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Você recebe aprox {{swapSats}} LN Sats (as taxas podem variar)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Você envia aprox {{swapSats}} LN Sats (as taxas podem variar)",
"Your order fixed exchange rate": "Taxa de câmbio fixa do seu pedido",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " со скидкой {{discount}}%",
" at a {{premium}}% premium": " с наценкой {{premium}}%",
" at market price": " по рыночной цене",
" of {{satoshis}} Satoshis": " {{satoshis}} Сатоши",
"Add New": "Добавить новый",
"Add geolocation for a face to face trade": "Добавьте геолокацию для торговли лицом к лицу",
"Amount Range": "Диапазон сумм",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Количество фиата для обмена на Биткойн",
"Buy BTC for ": "Купить BTC за ",
"Buy or Sell Bitcoin?": "Купить или Продать Биткойн?",
"Choose a Pricing Method": "Выберите метод расчёта цен",
"Clear form": "Очистить форму",
"Edit order": "Изменить ордер",
"Enable advanced options": "Включить дополнительные параметры",
"Enter the destination of the Lightning swap": "Введите пункт назначения обмена Lightning",
"Escrow/Invoice Timer (HH:mm)": "Таймер эскроу/инвойса (ЧЧ:мм)",
"Escrow/invoice step length": "Длина шага эскроу/инвойса",
"Exact": "Точно",
"Exact Amount": "Точное количество",
"Face to Face Location": "Место встречи лицом к лицу",
"Fiat Payment Method(s)": "Способ(ы) оплаты",
"Fidelity Bond Size": "Размер залога",
"In or Out of Lightning?": "В или из Lightning?",
"Let the price move with the market": "Пусть цена движется вместе с рынком",
"Must be less than {{maxAmount}}": "Должна быть меньше чем {{maxAmount}}",
"Must be less than {{maxSats}": "Должна быть меньше чем {{maxSats}}",
"Must be less than {{max}}%": "Должна быть меньше чем {{max}}%",
"Must be more than {{minAmount}}": "Должна быть больше чем {{minAmount}}",
"Must be more than {{minSats}}": "Должна быть больше чем {{minSats}}",
"Must be more than {{min}}%": "Должна быть больше чем {{min}}%",
"Must be shorter than 65 characters": "Должно быть короче 65и символов",
"Onchain amount to receive (BTC)": "Сумма для получения на ончейн (BTC)",
"Onchain amount to send (BTC)": "Сумма для отправки на ончейн (BTC)",
"Order current rate:": "Текущий курс ордера:",
"Order for ": "Ордер на ",
"Order rate:": "Ставка ордера:",
"Premium over Market (%)": "Наценка по сравнению с рынком (%)",
"Public Duration (HH:mm)": "Публичная продолжительность (ЧЧ: мм)",
"Public order length": "Длина общественного ордера",
"Relative": "Относительный",
"Satoshis": "Сатоши",
"Sell BTC for ": "Продать BTC за ",
"Set a fix amount of satoshis": "Установить фиксированное количество Сатоши",
"Set the skin-in-the-game, increase for higher safety assurance": "Установите залог, увеличьте для большей безопасности.",
"Swap Destination(s)": "Поменять место(а) назначения",
"Swap into LN ": "Обмен на LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Вы должны правильно заполнить форму",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Вы получаете примерно {{swapSats}} LN Sats (комиссия может различаться)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Вы отправляете примерно {{swapSats}} спутников LN (комиссия может различаться)",
"Your order fixed exchange rate": "Фиксированный курс обмена Вашего ордера",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Мейкер",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " med en rabatt på {{discount}}%",
" at a {{premium}}% premium": " med en premium på {{premium}}%",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " för {{satoshis}} sats",
"Add New": "Lägg till ny",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Summa fiat att växla till bitcoin",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "Köpa eller sälja bitcoin?",
"Choose a Pricing Method": "Välj en prissättningsmetod",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Betalningmetod(er) med fiat",
"Fidelity Bond Size": "Storlek på fidelity bond",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "Låt priset följa marknaden",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "Måste vara mindre än {{maxSats}}",
"Must be less than {{max}}%": "Måste vara mindre än {{max}}%",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "Måste vara mer än {{minSats}}",
"Must be more than {{min}}%": "Måste vara mer än {{min}}%",
"Must be shorter than 65 characters": "Måste vara kortare än 65 tecken",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "Aktuell kurs: ",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "Premium över marknaden (%)",
"Public Duration (HH:mm)": "Publikt tidsspann (HH:mm)",
"Public order length": "Public order length",
"Relative": "Relativ",
"Satoshis": "Sats",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "Ange en fast summa sats",
"Set the skin-in-the-game, increase for higher safety assurance": "Ange skin-in-the-game, öka för högre säkerhet",
"Swap Destination(s)": "Byt destination(er)",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Din orders fasta växelkurs",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " kwa punguzo la {{discount}}%",
" at a {{premium}}% premium": " kwa faida ya {{premium}}%",
" at market price": " kwa bei ya soko",
" of {{satoshis}} Satoshis": " ya {{satoshis}} Satoshis",
"Add New": "Ongeza Mpya",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Upeo wa Kiasi",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "Kiasi cha fiat cha kubadilishana kwa bitcoin",
"Buy BTC for ": "Nunua BTC kwa ",
"Buy or Sell Bitcoin?": "Nunua au Uza Bitcoin?",
"Choose a Pricing Method": "Chagua Njia ya Bei",
"Clear form": "Futa fomu",
"Edit order": "Hariri amri",
"Enable advanced options": "Washa chaguzi za juu",
"Enter the destination of the Lightning swap": "Ingiza marudio ya ubadilishaji wa Lightning",
"Escrow/Invoice Timer (HH:mm)": "Muda wa Amana/Bili (HH:mm)",
"Escrow/invoice step length": "Hatua ya muda wa Amana/bili",
"Exact": "Sahihi",
"Exact Amount": "Kiasi Sahihi",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "Njia za Malipo ya Fiat",
"Fidelity Bond Size": "Ukubwa wa Dhamana ya Uaminifu",
"In or Out of Lightning?": "Ndani au Nje ya Lightning?",
"Let the price move with the market": "Acha bei itembee na soko",
"Must be less than {{maxAmount}}": "Lazima iwe chini ya {{maxAmount}}",
"Must be less than {{maxSats}": "Lazima iwe chini ya {{maxSats}}",
"Must be less than {{max}}%": "Lazima iwe chini ya {{max}}%",
"Must be more than {{minAmount}}": "Lazima iwe zaidi ya {{minAmount}}",
"Must be more than {{minSats}}": "Lazima iwe zaidi ya {{minSats}}",
"Must be more than {{min}}%": "Lazima iwe zaidi ya {{min}}%",
"Must be shorter than 65 characters": "Lazima iwe fupi kuliko herufi 65",
"Onchain amount to receive (BTC)": "Kiasi cha onchain cha kupokea (BTC)",
"Onchain amount to send (BTC)": "Kiasi cha onchain cha kutuma (BTC)",
"Order current rate:": "Kiwango cha sasa cha amri:",
"Order for ": "Amri kwa ",
"Order rate:": "Kiwango cha amri:",
"Premium over Market (%)": "Faida juu ya Soko (%)",
"Public Duration (HH:mm)": "Muda wa Umma (HH:mm)",
"Public order length": "Urefu wa amri ya umma",
"Relative": "Mahususi",
"Satoshis": "Satoshis",
"Sell BTC for ": "Uza BTC kwa ",
"Set a fix amount of satoshis": "Weka kiasi sahihi cha satoshis",
"Set the skin-in-the-game, increase for higher safety assurance": "Weka skin-in-the-game, ongeza kwa uhakikisho wa usalama zaidi",
"Swap Destination(s)": "Marudio ya Kubadilisha",
"Swap into LN ": "Badilisha kwa LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "Lazima ujaze fomu kwa usahihi",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Unapokea takribani {{swapSats}} LN Sats (ada inaweza kutofautiana)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Unatuma takribani {{swapSats}} LN Sats (ada inaweza kutofautiana)",
"Your order fixed exchange rate": "Kiwango chako cha kubadilisha cha amri",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Muumba",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " ในราคาถูกกว่าตลาด {{discount}}% ",
" at a {{premium}}% premium": " ในราคาแพงกว่าตลาด {{premium}}% ",
" at market price": " at market price",
" of {{satoshis}} Satoshis": " เป็น Satoshis จำนวน {{satoshis}} Sats",
"Add New": "เพิ่มวิธีการ",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "ระบุจำนวนเงินเฟียตที่ต้องการใช้แลกเปลี่ยนกับ BTC",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "คุณต้องการซื้อหรือขาย BTC?",
"Choose a Pricing Method": "เลือกวิธีการตั้งราคา",
"Clear form": "Clear form",
"Edit order": "Edit order",
"Enable advanced options": "Enable advanced options",
"Enter the destination of the Lightning swap": "Enter the destination of the Lightning swap",
"Escrow/Invoice Timer (HH:mm)": "Escrow/Invoice Timer (HH:mm)",
"Escrow/invoice step length": "Escrow/invoice step length",
"Exact": "Exact",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "วิธีการชำระเงินเฟียต",
"Fidelity Bond Size": "วงเงินหลักประกันความเสียหาย (bond)",
"In or Out of Lightning?": "In or Out of Lightning?",
"Let the price move with the market": "ตั้งราคาให้มีการเปลี่ยนแปลงตามราคาเหรียญในตลาด",
"Must be less than {{maxAmount}}": "Must be less than {{maxAmount}}",
"Must be less than {{maxSats}": "ต้องน้อยกว่า {{maxSats}}",
"Must be less than {{max}}%": "ต้องน้อยกว่า {{max}}%",
"Must be more than {{minAmount}}": "Must be more than {{minAmount}}",
"Must be more than {{minSats}}": "ต้องมากกว่า {{minSats}}",
"Must be more than {{min}}%": "ต้องมากกว่า {{min}}%",
"Must be shorter than 65 characters": "ต้องสั้นกว่า 65 ตัวอักษร",
"Onchain amount to receive (BTC)": "Onchain amount to receive (BTC)",
"Onchain amount to send (BTC)": "Onchain amount to send (BTC)",
"Order current rate:": "ราคาที่คุณกำหนด:",
"Order for ": "Order for ",
"Order rate:": "Order rate:",
"Premium over Market (%)": "ค่าพรีเมี่ยมจากท้องตลาด (%)",
"Public Duration (HH:mm)": "ประกาศรายการซื้อขายมีอายุ (ชม:นาที)",
"Public order length": "Public order length",
"Relative": "ตั้งตามราคาตลาด",
"Satoshis": "Satoshis",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "กำหนดจำนวน satoshis ที่ต้องการซื้อขาย",
"Set the skin-in-the-game, increase for higher safety assurance": "การวางหลักประกันเยอะขึ้นจะช่วยลดแรงจูงใจของคนที่คิดจะโกง",
"Swap Destination(s)": "Swap Destination(s)",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "You must fill the form correctly",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "คุณกำหนดอัตราแลกเปลี่ยนคงที่",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "Maker",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " 于 {{discount}}% 折扣",
" at a {{premium}}% premium": " 于 {{premium}}% 溢价",
" at market price": " at market price",
" of {{satoshis}} Satoshis": "{{satoshis}} 聪",
"Add New": "添新",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "兑换比特币的法币金额",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "购买还是出售比特币?",
"Choose a Pricing Method": "选择定价方法",
"Clear form": "清除表单",
"Edit order": "编辑订单",
"Enable advanced options": "启用高级选项",
"Enter the destination of the Lightning swap": "输入闪电交换的目的地",
"Escrow/Invoice Timer (HH:mm)": "托管存款/发票倒计时 (HH:mm)",
"Escrow/invoice step length": "托管/发票步长",
"Exact": "确切",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "法币付款方法",
"Fidelity Bond Size": "保证金大小",
"In or Out of Lightning?": "换入还是换出闪电?",
"Let the price move with the market": "让价格随市场移动",
"Must be less than {{maxAmount}}": "必须少于 {{maxAmount}}",
"Must be less than {{maxSats}": "必须少于 {{maxSats}}",
"Must be less than {{max}}%": "必须少于 {{max}}%",
"Must be more than {{minAmount}}": "必须多于 {{minAmount}}",
"Must be more than {{minSats}}": "必须多于 {{minSats}}",
"Must be more than {{min}}%": "必须多于 {{min}}%",
"Must be shorter than 65 characters": "必须少于65个字符",
"Onchain amount to receive (BTC)": "链上接收金额BTC",
"Onchain amount to send (BTC)": "链上发送金额BTC",
"Order current rate:": "订单当前价格:",
"Order for ": "Order for ",
"Order rate:": "订单价格:",
"Premium over Market (%)": "市场溢价(%",
"Public Duration (HH:mm)": "公开时间 (HH:mm)",
"Public order length": "订单公开长度",
"Relative": "相对",
"Satoshis": "聪",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "设置固定聪金额",
"Set the skin-in-the-game, increase for higher safety assurance": "设定风险共担,以提高安全保障",
"Swap Destination(s)": "交换目的地",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "你必须正确填写表格",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "你将接收大约{{swapSats}}闪电聪(费用会造成有所差异)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "你将发送大约{{swapSats}}闪电聪(费用会造成有所差异)",
"Your order fixed exchange rate": "你的订单的固定汇率",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "挂单方",

View File

@ -360,7 +360,6 @@
" at a {{discount}}% discount": " 於 {{discount}}% 折扣",
" at a {{premium}}% premium": " 於 {{premium}}% 溢價",
" at market price": " at market price",
" of {{satoshis}} Satoshis": "{{satoshis}} 聰",
"Add New": "添新",
"Add geolocation for a face to face trade": "Add geolocation for a face to face trade",
"Amount Range": "Amount Range",
@ -368,39 +367,30 @@
"Amount of fiat to exchange for bitcoin": "兌換比特幣的法幣金額",
"Buy BTC for ": "Buy BTC for ",
"Buy or Sell Bitcoin?": "購買還是出售比特幣?",
"Choose a Pricing Method": "選擇定價方法",
"Clear form": "清除表單",
"Edit order": "編輯訂單",
"Enable advanced options": "啟用高級選項",
"Enter the destination of the Lightning swap": "輸入閃電交換的目的地",
"Escrow/Invoice Timer (HH:mm)": "託管存款/發票倒計時 (HH:mm)",
"Escrow/invoice step length": "託管/發票步長",
"Exact": "確切",
"Exact Amount": "Exact Amount",
"Face to Face Location": "Face to Face Location",
"Fiat Payment Method(s)": "法幣付款方法",
"Fidelity Bond Size": "保證金大小",
"In or Out of Lightning?": "換入還是換出閃電?",
"Let the price move with the market": "讓價格隨市場移動",
"Must be less than {{maxAmount}}": "必須少於 {{maxAmount}}",
"Must be less than {{maxSats}": "必須少於 {{maxSats}}",
"Must be less than {{max}}%": "必須少於 {{max}}%",
"Must be more than {{minAmount}}": "必須多於 {{minAmount}}",
"Must be more than {{minSats}}": "必須多於 {{minSats}}",
"Must be more than {{min}}%": "必須多於 {{min}}%",
"Must be shorter than 65 characters": "必須少於65個字符",
"Onchain amount to receive (BTC)": "鏈上接收金額BTC",
"Onchain amount to send (BTC)": "鏈上發送金額BTC",
"Order current rate:": "訂單當前價格:",
"Order for ": "Order for ",
"Order rate:": "訂單價格:",
"Premium over Market (%)": "市場溢價 (%)",
"Public Duration (HH:mm)": "公開時間 (HH:mm)",
"Public order length": "訂單公開長度",
"Relative": "相對",
"Satoshis": "聰",
"Sell BTC for ": "Sell BTC for ",
"Set a fix amount of satoshis": "設置固定聰金額",
"Set the skin-in-the-game, increase for higher safety assurance": "設定風險共擔, 以提高安全保障",
"Swap Destination(s)": "交換目的地",
"Swap into LN ": "Swap into LN ",
@ -413,7 +403,6 @@
"You must fill the form correctly": "你必須正確填寫表格",
"You receive approx {{swapSats}} LN Sats (fees might vary)": "你將接收大約{{swapSats}}閃電聰(費用會造成有所差異)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "你將發送大約{{swapSats}}閃電聰(費用會造成有所差異)",
"Your order fixed exchange rate": "你的訂單的固定匯率",
"#41": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Disabled": "Disabled",
"Maker": "掛單方",