+
@@ -95,7 +99,7 @@ export const RecoveryWords = ({ deviceID }: TProps) => {
-
-
+
{t('button.back')}
-
+
) : children}
diff --git a/frontends/web/src/routes/device/bitbox02/setup/choose.tsx b/frontends/web/src/routes/device/bitbox02/setup/choose.tsx
index a579ac435b..3e51d88e8c 100644
--- a/frontends/web/src/routes/device/bitbox02/setup/choose.tsx
+++ b/frontends/web/src/routes/device/bitbox02/setup/choose.tsx
@@ -9,7 +9,8 @@ import { Column, ColumnButtons, Grid, ResponsiveGrid } from '@/components/layout
import { Button, Label } from '@/components/forms';
import { Toggle } from '@/components/toggle/toggle';
import { InfoBlue } from '@/components/icon';
-import { BackButton } from '@/components/backbutton/backbutton';
+import { DesktopBackButton } from '@/components/backbutton/backbutton';
+import { MobileHeader } from '@/routes/settings/components/mobile-header';
import style from './choose.module.css';
export type TWalletSetupChoices = 'create-wallet' | 'restore-sdcard' | 'restore-mnemonic';
@@ -36,6 +37,11 @@ export const SetupOptions = ({
const [advanced, setAdvanced] = useState(false);
const [withMnemonic, setWithMnemonic] = useState(false);
const [with12Words, setWith12Words] = useState(false);
+ const handleAdvancedBack = () => {
+ setWithMnemonic(false);
+ setWith12Words(false);
+ setAdvanced(false);
+ };
if (advanced) {
const {
@@ -49,6 +55,11 @@ export const SetupOptions = ({
verticallyCentered
withBottomBar
width="1100px">
+
@@ -134,15 +145,11 @@ export const SetupOptions = ({
primary>
{t('seed.create')}
- {
- setWithMnemonic(false);
- setWith12Words(false);
- setAdvanced(false);
- }}
+
{t('button.back')}
-
+
diff --git a/frontends/web/src/routes/device/bitbox02/setup/name.tsx b/frontends/web/src/routes/device/bitbox02/setup/name.tsx
index 8701c67437..cd09d40ed3 100644
--- a/frontends/web/src/routes/device/bitbox02/setup/name.tsx
+++ b/frontends/web/src/routes/device/bitbox02/setup/name.tsx
@@ -5,10 +5,11 @@ import { useTranslation } from 'react-i18next';
import { View, ViewButtons, ViewContent, ViewHeader } from '@/components/view/view';
import { Message } from '@/components/message/message';
import { Button, Input } from '@/components/forms';
-import { BackButton } from '@/components/backbutton/backbutton';
+import { DesktopBackButton } from '@/components/backbutton/backbutton';
import { checkSDCard } from '@/api/bitbox02';
import { useValidateDeviceName } from '@/hooks/devicename';
import { TDeviceNameError } from '@/utils/types';
+import { MobileHeader } from '@/routes/settings/components/mobile-header';
import style from './name.module.css';
type TProps = {
@@ -41,6 +42,11 @@ export const SetDeviceName = ({
withBottomBar
verticallyCentered
width="600px">
+
{t('button.continue')}
-
{t('button.back')}
-
+
diff --git a/frontends/web/src/routes/device/bitbox02/setup/restore.tsx b/frontends/web/src/routes/device/bitbox02/setup/restore.tsx
index b20b554b2f..e6d5e92fc9 100644
--- a/frontends/web/src/routes/device/bitbox02/setup/restore.tsx
+++ b/frontends/web/src/routes/device/bitbox02/setup/restore.tsx
@@ -4,7 +4,8 @@ import { useTranslation } from 'react-i18next';
import { BackupsV2 } from '@/routes/device/bitbox02/backups';
import { Backup } from '@/api/backup';
import { View, ViewContent, ViewHeader } from '@/components/view/view';
-import { BackButton } from '@/components/backbutton/backbutton';
+import { DesktopBackButton } from '@/components/backbutton/backbutton';
+import { MobileHeader } from '@/routes/settings/components/mobile-header';
type Props = {
deviceID: string;
@@ -27,6 +28,11 @@ export const RestoreFromSDCardBackup = ({
verticallyCentered
withBottomBar
width="700px">
+
-
{t('button.back')}
-
+
diff --git a/frontends/web/src/routes/device/manage-backups/manage-backups.tsx b/frontends/web/src/routes/device/manage-backups/manage-backups.tsx
index d1a2403415..2b6b132769 100644
--- a/frontends/web/src/routes/device/manage-backups/manage-backups.tsx
+++ b/frontends/web/src/routes/device/manage-backups/manage-backups.tsx
@@ -3,10 +3,11 @@
import { useTranslation } from 'react-i18next';
import { TDevices } from '@/api/devices';
import { SubTitle } from '@/components/title';
-import { BackButton } from '@/components/backbutton/backbutton';
+import { DesktopBackButton } from '@/components/backbutton/backbutton';
import { Guide } from '@/components/guide/guide';
import { Entry } from '@/components/guide/entry';
import { Header } from '@/components/layout';
+import { MobileHeader } from '@/routes/settings/components/mobile-header';
import { Backups } from '@/routes/device/bitbox01/backups';
import { BackupsV2 } from '@/routes/device/bitbox02/backups';
import { SDCardCheck } from '@/routes/device/bitbox02/sdcardcheck';
@@ -31,7 +32,12 @@ export const ManageBackups = ({
{t('backup.title')}}
+ title={
+ <>
+ {t('backup.title')}
+
+ >
+ }
/>
-
+
{t('button.back')}
-
+
>
);
@@ -81,9 +87,9 @@ const BackupsList = ({
showCreate={true}
showRestore={false}
showRadio={false}>
-
+
{t('button.back')}
-
+
);
diff --git a/frontends/web/src/routes/market/swap/swap.test.tsx b/frontends/web/src/routes/market/swap/swap.test.tsx
index df8f9f76c7..09b4ba5312 100644
--- a/frontends/web/src/routes/market/swap/swap.test.tsx
+++ b/frontends/web/src/routes/market/swap/swap.test.tsx
@@ -35,6 +35,7 @@ vi.mock('@/components/guide/entry', () => ({
}));
vi.mock('@/components/backbutton/backbutton', () => ({
BackButton: ({ children }: { children: ReactNode }) => {children}
,
+ DesktopBackButton: ({ children }: { children: ReactNode }) => {children}
,
}));
vi.mock('@/components/spinner/SpinnerAnimation', () => ({
SpinnerRingAnimated: () => null,
diff --git a/frontends/web/src/routes/market/swap/swap.tsx b/frontends/web/src/routes/market/swap/swap.tsx
index 0e5ab57186..43af662e17 100644
--- a/frontends/web/src/routes/market/swap/swap.tsx
+++ b/frontends/web/src/routes/market/swap/swap.tsx
@@ -34,7 +34,7 @@ import { Entry } from '@/components/guide/entry';
import { alertUser } from '@/components/alert/Alert';
import { Message } from '@/components/message/message';
import { Button, Label } from '@/components/forms';
-import { BackButton } from '@/components/backbutton/backbutton';
+import { DesktopBackButton } from '@/components/backbutton/backbutton';
import { AmountWithUnit } from '@/components/amount/amount-with-unit';
import { ArrowSwap } from '@/components/icon';
import { SpinnerRingAnimated } from '@/components/spinner/SpinnerAnimation';
@@ -499,9 +499,10 @@ export const Swap = ({
- {t('generic.swap')}
-
+ <>
+ {t('generic.swap')}
+
+ >
}
/>
-
+
{t('button.back')}
-
+
@@ -534,9 +535,10 @@ export const Swap = ({
- {t('generic.swap')}
-
+ <>
+ {t('generic.swap')}
+
+ >
}
/>
-
+
{t('button.back')}
-
+
diff --git a/frontends/web/src/routes/settings/components/mobile-header.module.css b/frontends/web/src/routes/settings/components/mobile-header.module.css
index 122d8df80f..a6d7123b84 100644
--- a/frontends/web/src/routes/settings/components/mobile-header.module.css
+++ b/frontends/web/src/routes/settings/components/mobile-header.module.css
@@ -4,6 +4,10 @@
position: relative;
}
+.withViewPadding {
+ padding: 0 var(--space-half);
+}
+
.backButton {
align-items: center;
background-color: transparent;
@@ -36,7 +40,13 @@
margin: 0 auto;
position: absolute;
left: calc(50%);
- transform: translateX(calc(-50% + 16px));
+ transform: translateX(calc(-50% + 8px));
+ white-space: nowrap;
+}
+
+.titleOnly .headerText {
+ left: 50%;
+ transform: translateX(-50%);
}
@media (max-width: 768px) {
@@ -50,8 +60,8 @@
display: none;
}
- .headerText {
- left: calc(50% + 8px);
- transform: translateX(calc(-50% + 8px));
+ .titleOnly .headerText {
+ left: 50%;
+ transform: translateX(-50%);
}
-}
\ No newline at end of file
+}
diff --git a/frontends/web/src/routes/settings/components/mobile-header.tsx b/frontends/web/src/routes/settings/components/mobile-header.tsx
index 2d83176dbc..e77dfa85c8 100644
--- a/frontends/web/src/routes/settings/components/mobile-header.tsx
+++ b/frontends/web/src/routes/settings/components/mobile-header.tsx
@@ -2,21 +2,33 @@
import { useNavigate } from 'react-router-dom';
import { ChevronLeftDark } from '@/components/icon';
+import { useBackNavigation } from '@/contexts/BackNavigationContext';
import { UseBackButton } from '@/hooks/backbutton';
import styles from './mobile-header.module.css';
type TProps = {
- title: string;
+ title?: string;
+ variant?: 'back' | 'titleOnly';
withGuide?: boolean;
+ withViewPadding?: boolean;
onClick?: () => void;
};
-export const MobileHeader = ({ title, withGuide = false, onClick }: TProps) => {
+export const MobileHeader = ({
+ title = '',
+ variant = 'back',
+ withGuide = false,
+ withViewPadding = false,
+ onClick,
+}: TProps) => {
const navigate = useNavigate();
+ const { goBack } = useBackNavigation();
const handleClick = () => {
// goes to the previous page if no onClick function is provided
if (!onClick) {
- navigate(-1);
+ if (!goBack()) {
+ navigate(-1);
+ }
} else {
onClick();
}
@@ -24,15 +36,21 @@ export const MobileHeader = ({ title, withGuide = false, onClick }: TProps) => {
return (
-
{
- handleClick();
- return false;
- }} />
-
-
-
+ {variant === 'back' && (
+ <>
+ {
+ handleClick();
+ return false;
+ }} />
+
+
+
+ >
+ )}
{title}
diff --git a/frontends/web/src/routes/settings/electrum.tsx b/frontends/web/src/routes/settings/electrum.tsx
index f9fe0d0216..b1654982ba 100644
--- a/frontends/web/src/routes/settings/electrum.tsx
+++ b/frontends/web/src/routes/settings/electrum.tsx
@@ -8,8 +8,9 @@ import { ElectrumServers } from './electrum-servers';
import { Guide } from '@/components/guide/guide';
import { Entry } from '@/components/guide/entry';
import { Button } from '@/components/forms';
-import { BackButton } from '@/components/backbutton/backbutton';
+import { DesktopBackButton } from '@/components/backbutton/backbutton';
import { Header } from '@/components/layout';
+import { MobileHeader } from './components/mobile-header';
export const ElectrumSettings = () => {
const { t } = useTranslation();
@@ -29,7 +30,13 @@ export const ElectrumSettings = () => {
-
{t('settings.expert.electrum.title')}} />
+
+ {t('settings.expert.electrum.title')}
+
+ >
+ } />
@@ -60,9 +67,9 @@ export const ElectrumSettings = () => {
)
}
-
+
{t('button.back')}
-
+
diff --git a/frontends/web/src/routes/settings/mobile-settings.tsx b/frontends/web/src/routes/settings/mobile-settings.tsx
index db6ba5b027..d2ec726446 100644
--- a/frontends/web/src/routes/settings/mobile-settings.tsx
+++ b/frontends/web/src/routes/settings/mobile-settings.tsx
@@ -7,6 +7,7 @@ import { Tabs, WithSettingsTabs } from './components/tabs';
import { TPagePropsWithSettingsTabs } from './types';
import { ContentWrapper } from '@/components/contentwrapper/contentwrapper';
import { GlobalBanners } from '@/components/banners';
+import { useBackNavigation } from '@/contexts/BackNavigationContext';
import { useOnlyVisitableOnMobile } from '@/hooks/onlyvisitableonmobile';
import { MobileHeader } from '@/routes/settings/components/mobile-header';
import { useNavigate } from 'react-router-dom';
@@ -21,8 +22,12 @@ import { useNavigate } from 'react-router-dom';
export const MobileSettings = ({ devices, hasAccounts }: TPagePropsWithSettingsTabs) => {
const { t } = useTranslation();
const navigate = useNavigate();
+ const { goBack } = useBackNavigation();
useOnlyVisitableOnMobile('/settings/general');
const handleClick = () => {
+ if (goBack()) {
+ return;
+ }
// go to home page if no devices or accounts (waiting.tsx will be shown)
if (Object.keys(devices).length === 0 && !hasAccounts) {
navigate('/');