diff --git a/src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx b/src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx
new file mode 100644
index 000000000..50f3ba234
--- /dev/null
+++ b/src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx
@@ -0,0 +1,103 @@
+import { EnterFullScreenIcon, ExitFullScreenIcon } from '@radix-ui/react-icons';
+import { Checkbox, Flex, Heading, IconButton, Text } from '@radix-ui/themes';
+import { TIER_ROMAN_NUMERALS } from '../../../../../../core/blitzkit/tankDefinitions/constants';
+import { useFullScreen } from '../../../../../../hooks/useFullScreen';
+import strings from '../../../../../../lang/en-US.json';
+import { theme } from '../../../../../../stitches.config';
+import { useDuel } from '../../../../../../stores/duel';
+import mutateTankopediaPersistent, {
+ useTankopediaPersistent,
+} from '../../../../../../stores/tankopedia';
+import { TankSandbox } from './TankSandbox';
+
+export function HeroSection() {
+ const tank = useDuel((state) => state.protagonist!.tank);
+ const mode = useTankopediaPersistent((state) => state.mode);
+ const isFullScreen = useFullScreen();
+
+ return (
+
+
+
+ {tank.name}
+
+ Tier {TIER_ROMAN_NUMERALS[tank.tier]}{' '}
+ {(strings.common.nations as Record)[tank.nation]}{' '}
+ {strings.common.tank_class_short[tank.class]}
+
+
+
+
+
+
+
+
+
{
+ mutateTankopediaPersistent((draft) => {
+ draft.mode = draft.mode === 'armor' ? 'model' : 'armor';
+ });
+ }}
+ >
+
+ Armor
+
+
+
+
+ {
+ document.body.requestFullscreen();
+ }}
+ >
+ {isFullScreen ? : }
+
+
+ );
+}
diff --git a/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx b/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx
index b6046a772..1804c44d4 100644
--- a/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx
+++ b/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx
@@ -1,5 +1,3 @@
-import { LightningBoltIcon } from '@radix-ui/react-icons';
-import { Button, Card, Flex, Tabs, Text, Theme } from '@radix-ui/themes';
import { PerspectiveCamera } from '@react-three/drei';
import { Canvas } from '@react-three/fiber';
import { Suspense, use, useEffect, useRef, useState } from 'react';
@@ -10,24 +8,18 @@ import { applyPitchYawLimits } from '../../../../../../core/blitz/applyPitchYawL
import { modelDefinitions } from '../../../../../../core/blitzkit/modelDefinitions';
import { modelTransformEvent } from '../../../../../../core/blitzkit/modelTransform';
import { Pose, poseEvent } from '../../../../../../core/blitzkit/pose';
-import { tankIcon } from '../../../../../../core/blitzkit/tankIcon';
import { useEquipment } from '../../../../../../hooks/useEquipment';
import { useFullScreen } from '../../../../../../hooks/useFullScreen';
import { useWideFormat } from '../../../../../../hooks/useWideFormat';
-import { BlitzkitWide } from '../../../../../../icons/BlitzkitWide';
import { mutateDuel, useDuel } from '../../../../../../stores/duel';
-import mutateTankopediaPersistent, {
- TankopediaMode,
+import {
mutateTankopediaTemporary,
useTankopediaPersistent,
} from '../../../../../../stores/tankopedia';
-import { AntagonistBar } from '../AntagonistBar';
import { Controls } from '../Control';
import { Lighting } from '../Lighting';
-import { RotationInputs } from '../QuickInputs';
import { SceneProps } from '../SceneProps';
import { ModelLoader } from './components/ModelLoader';
-import { Options } from './components/Options';
import { TankModel } from './components/TankModel';
export function TankSandbox() {
@@ -138,137 +130,30 @@ export function TankSandbox() {
}, [protagonist.gun, protagonist.turret]);
return (
-
-
-
- {
- mutateTankopediaPersistent((draft) => {
- draft.mode = mode as TankopediaMode;
- });
- }}
- >
-
-
-
- Model
-
-
- Armor
-
-
+
-
-
+ }>
+
+
+
+
+
+
);
}
diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/src/app/tools/tankopedia/[id]/page.tsx
index 43184f198..7b8ffbfe5 100644
--- a/src/app/tools/tankopedia/[id]/page.tsx
+++ b/src/app/tools/tankopedia/[id]/page.tsx
@@ -1,23 +1,12 @@
'use client';
-import { Flex } from '@radix-ui/themes';
import { useEffect } from 'react';
import PageWrapper from '../../../../components/PageWrapper';
import { assignDuelMember } from '../../../../core/blitzkit/assignDuelMember';
import { useWideFormat } from '../../../../hooks/useWideFormat';
import { mutateDuel, useDuel } from '../../../../stores/duel';
import { mutateTankopediaTemporary } from '../../../../stores/tankopedia';
-import { AntagonistBar } from './components/AntagonistBar';
-import { Characteristics } from './components/Characteristics';
-import { Consumables } from './components/Characteristics/components/Consumables';
-import { Equipment } from './components/Characteristics/components/Equipment';
-import { Miscellaneous } from './components/Characteristics/components/Miscellaneous';
-import { Modules } from './components/Characteristics/components/Modules';
-import { Provisions } from './components/Characteristics/components/Provisions';
-import { Skills } from './components/Characteristics/components/Skills';
-import { TankSandbox } from './components/Model/TankSandbox';
-import { Title } from './components/Title';
-import { Videos } from './components/Videos';
+import { HeroSection } from './components/Model/HeroSection';
export default function Page({ params }: { params: { id: string } }) {
const initialId = parseInt(params.id);
@@ -66,52 +55,10 @@ export default function Page({ params }: { params: { id: string } }) {
}, [initialId, assigned]);
return (
-
+
{assigned && (
<>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
>
)}
diff --git a/src/components/PageWrapper.tsx b/src/components/PageWrapper.tsx
index 6a24b60fd..8de691c0a 100644
--- a/src/components/PageWrapper.tsx
+++ b/src/components/PageWrapper.tsx
@@ -4,6 +4,8 @@ import { ComponentProps } from 'react';
type PageWrapperProps = FlexProps & {
color?: ComponentProps['accentColor'];
size?: number | string;
+ noPadding?: boolean;
+ noMaxWidth?: boolean;
};
export default function PageWrapper({
@@ -11,6 +13,8 @@ export default function PageWrapper({
color,
size = 800,
children,
+ noPadding = false,
+ noMaxWidth = false,
...props
}: PageWrapperProps) {
return (
@@ -27,9 +31,9 @@ export default function PageWrapper({
gap="4"
style={{
width: '100%',
- maxWidth: size,
+ maxWidth: noMaxWidth ? undefined : size,
margin: 'auto',
- padding: 16,
+ padding: noPadding ? 0 : 16,
boxSizing: 'border-box',
flex: 1,
...style,