From 080dd4297bd014776d1dff4c03ce496048ecbdf2 Mon Sep 17 00:00:00 2001 From: NikitaZavartsev Date: Thu, 19 Feb 2026 11:46:21 +0100 Subject: [PATCH 1/2] feat: redesign --- package-lock.json | 12 +- package.json | 2 +- src/App.tsx | 28 +- src/components/CameraScreen.tsx | 216 +++++++++++--- src/components/GalleryScreen.tsx | 125 ++++++-- src/components/ItemCard.tsx | 112 ++++++- src/components/MainScreen.tsx | 82 +++++- src/components/common/ApertureSelector.tsx | 35 ++- src/components/common/DialogHeader.tsx | 46 ++- src/components/common/EmptyStateDisplay.tsx | 58 +++- src/components/common/LensSelector.tsx | 33 ++- .../common/ShutterSpeedSelector.tsx | 35 ++- src/theme/index.ts | 277 ++++++++++++++++++ 13 files changed, 936 insertions(+), 125 deletions(-) create mode 100644 src/theme/index.ts diff --git a/package-lock.json b/package-lock.json index 0f8ad5a..19050d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "vibe_app_2", - "version": "2.0.2", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vibe_app_2", - "version": "2.0.2", + "version": "3.0.0", "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@fontsource/roboto": "^5.2.8", + "@fontsource/inter": "^5.2.8", "@mui/icons-material": "^7.3.4", "@mui/material": "^7.3.4", "playwright": "^1.56.1", @@ -2226,10 +2226,10 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@fontsource/roboto": { + "node_modules/@fontsource/inter": { "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-5.2.8.tgz", - "integrity": "sha512-oh9g4Cg3loVMz9MWeKWfDI+ooxxG1aRVetkiKIb2ESS2rrryGecQ/y4pAj4z5A5ebyw450dYRi/c4k/I3UBhHA==", + "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" diff --git a/package.json b/package.json index c8d15e9..54d5ea5 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@fontsource/roboto": "^5.2.8", + "@fontsource/inter": "^5.2.8", "@mui/icons-material": "^7.3.4", "@mui/material": "^7.3.4", "playwright": "^1.56.1", diff --git a/src/App.tsx b/src/App.tsx index 50182f7..97973a9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,11 +1,12 @@ import { useState, useEffect } from 'react'; -import { ThemeProvider, createTheme } from '@mui/material/styles'; +import { ThemeProvider } from '@mui/material/styles'; import CssBaseline from '@mui/material/CssBaseline'; import { Snackbar, Alert, Button } from '@mui/material'; -import '@fontsource/roboto/300.css'; -import '@fontsource/roboto/400.css'; -import '@fontsource/roboto/500.css'; -import '@fontsource/roboto/700.css'; +import '@fontsource/inter/300.css'; +import '@fontsource/inter/400.css'; +import '@fontsource/inter/500.css'; +import '@fontsource/inter/600.css'; +import '@fontsource/inter/700.css'; import { MainScreen } from './components/MainScreen'; import { SetupScreen } from './components/SetupScreen'; @@ -17,20 +18,7 @@ import { storage } from './utils/storage'; // import { SyncManager } from './utils/syncManager'; // Temporarily disabled import type { FilmRoll, Exposure, AppState, Camera, Lens, AppSettings, ExposureSettings } from './types'; import { SHUTTER_SPEED, APERTURE } from './types'; - -const theme = createTheme({ - palette: { - primary: { - main: '#1976d2', - }, - secondary: { - main: '#dc004e', - }, - }, - typography: { - fontFamily: 'Roboto, Arial, sans-serif', - }, -}); +import { filmTheme } from './theme'; function App() { const [exposureSettings, setExposureSettings] = useState({ @@ -508,7 +496,7 @@ function App() { }; return ( - + {renderCurrentScreen()} diff --git a/src/components/CameraScreen.tsx b/src/components/CameraScreen.tsx index 2a4a4fa..cd23881 100644 --- a/src/components/CameraScreen.tsx +++ b/src/components/CameraScreen.tsx @@ -30,14 +30,15 @@ import { camera, geolocation, fileUtils } from '../utils/camera'; import type { FilmRoll, Exposure, ExposureSettings, Lens } from '../types'; import { APERTURE, APERTURE_VALUES, SHUTTER_SPEED, SHUTTER_SPEED_VALUES, EI_VALUES } from '../types'; import { FocalLengthSlider } from './FocalLengthSlider'; +import { colors } from '../theme'; -// Add CSS for shutter effect animation +// Add CSS for enhanced shutter effect animation const shutterEffectStyles = ` @keyframes shutterEffect { - 0% { opacity: 0; } - 10% { opacity: 1; } - 90% { opacity: 1; } - 100% { opacity: 0; } + 0% { opacity: 0; transform: scaleY(0); } + 5% { opacity: 1; transform: scaleY(1); } + 95% { opacity: 1; transform: scaleY(1); } + 100% { opacity: 0; transform: scaleY(0); } } `; @@ -347,11 +348,32 @@ export const CameraScreen: React.FC = ({ )} - + {filmRoll.name} - - {currentExposureNumber}/{filmRoll.totalExposures} - {exposuresLeft} left + + + {currentExposureNumber} + + /{filmRoll.totalExposures} + + + {exposuresLeft} remaining + @@ -360,8 +382,23 @@ export const CameraScreen: React.FC = ({ - {/* Camera View */} - + {/* Camera View - Viewfinder Frame */} + {isCameraActive ? ( <>