diff --git a/package.json b/package.json index 75dd634..ffa29fc 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "sonner": "^2.0.3", "tailwind-merge": "^3.2.0", "tailwindcss-animate": "^1.0.7", + "tailwindcss-animated": "^2.0.0", "tw-animate-css": "^1.2.6", "zod": "^3.24.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 430bf8d..9c7face 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -95,6 +95,9 @@ importers: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@4.1.4) + tailwindcss-animated: + specifier: ^2.0.0 + version: 2.0.0(tailwindcss@4.1.4) tw-animate-css: specifier: ^1.2.6 version: 1.2.6 @@ -2538,6 +2541,11 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' + tailwindcss-animated@2.0.0: + resolution: {integrity: sha512-anNNGpxNgjydD8p1lcJjxxH+XbjW6KR8Xs29owTrbcf3tOJ6IRblpyFob43HBkfxFJJTAfFQqugoEG2b1EsR0A==} + peerDependencies: + tailwindcss: '>=3.1.0 || >=4.0.0' + tailwindcss@4.1.4: resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==} @@ -5138,6 +5146,10 @@ snapshots: dependencies: tailwindcss: 4.1.4 + tailwindcss-animated@2.0.0(tailwindcss@4.1.4): + dependencies: + tailwindcss: 4.1.4 + tailwindcss@4.1.4: {} tapable@2.2.1: {} diff --git a/public/oriyo_bg.jpeg b/public/oriyo_bg.jpeg new file mode 100644 index 0000000..77ed27a Binary files /dev/null and b/public/oriyo_bg.jpeg differ diff --git a/src/app/globals.css b/src/app/globals.css index 2090000..52b2213 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,5 +1,6 @@ @import 'tailwindcss'; -@import "tw-animate-css"; +@import 'tw-animate-css'; +@import 'tailwindcss-animated'; @custom-variant dark (&:is(.dark *)); @@ -49,7 +50,7 @@ --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.577 0.245 27.325) ; + --primary: oklch(0.577 0.245 27.325); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.205 0 0); @@ -120,49 +121,3 @@ @apply bg-background text-foreground; } } - -.tracking-in-expand { - animation: tracking-in-expand 2s cubic-bezier(0.215, 0.610, 0.355, 1.000) both; -} - -@keyframes tracking-in-expand { - 0% { - letter-spacing: -0.5em; - opacity: 0; - } - 40% { - opacity: 0.6; - } - 100% { - opacity: 1; - } -} - - -.heartbeat { - animation: heartbeat 1.5s ease-in-out infinite both; -} - -@keyframes heartbeat { - from { - transform: scale(1); - transform-origin: center center; - animation-timing-function: ease-out; - } - 10% { - transform: scale(0.91); - animation-timing-function: ease-in; - } - 17% { - transform: scale(0.98); - animation-timing-function: ease-out; - } - 33% { - transform: scale(0.87); - animation-timing-function: ease-in; - } - 45% { - transform: scale(1); - animation-timing-function: ease-out; - } -} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 60d2721..6fcee9d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -22,7 +22,12 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - +
diff --git a/src/features/map/ui/gas-station-map.tsx b/src/features/map/ui/gas-station-map.tsx index 7621105..5ef8a15 100644 --- a/src/features/map/ui/gas-station-map.tsx +++ b/src/features/map/ui/gas-station-map.tsx @@ -529,8 +529,8 @@ export default function GasStationMap() { className='border border-gray-200 bg-white text-gray-800 shadow-md hover:bg-gray-100' onClick={() => setIsFilterOpen(true)} > - - {t('map.filters')} + + {t('map.filters')} {(activeFilters.length > 0 || activeCities.length > 0) && ( {activeFilters.length + activeCities.length} @@ -546,8 +546,8 @@ export default function GasStationMap() { className='border border-gray-200 bg-white text-gray-800 shadow-md hover:bg-gray-100' onClick={() => setIsStationListOpen(true)} > - - {t('map.stationsList')} + + {t('map.stationsList')} {filteredStations.length} diff --git a/src/shared/components/about-counter.tsx b/src/shared/components/about-counter.tsx index 317f7f3..6f301c0 100644 --- a/src/shared/components/about-counter.tsx +++ b/src/shared/components/about-counter.tsx @@ -33,8 +33,8 @@ export default function AboutCounter() { }, []); return ( -
-
+
+
@@ -43,7 +43,7 @@ export default function AboutCounter() {

Сотрудников

-
+
@@ -52,7 +52,7 @@ export default function AboutCounter() {

Литров топлива в месяц

-
+
diff --git a/src/widgets/about-section.tsx b/src/widgets/about-section.tsx index 11d8a6b..3d26fe7 100644 --- a/src/widgets/about-section.tsx +++ b/src/widgets/about-section.tsx @@ -10,7 +10,7 @@ export const AboutSection = () => { const { t } = useLanguage(); return ( -
+
@@ -24,47 +24,7 @@ export const AboutSection = () => {

{t('home.about.description2')}

-
-
-
- -
-
-

- {t('home.about.features.quality.title')} -

-

- {t('home.about.features.quality.description')} -

-
-
-
-
- -
-
-

- {t('home.about.features.equipment.title')} -

-

- {t('home.about.features.equipment.description')} -

-
-
-
-
- -
-
-

- {t('home.about.features.staff.title')} -

-

- {t('home.about.features.staff.description')} -

-
-
-
+
{
); }; + +interface Feature { + title: string; + description: string; +} + +const features: Array = [ + { + title: 'home.about.features.quality.title', + description: 'home.about.features.quality.description', + }, + { + title: 'home.about.features.equipment.title', + description: 'home.about.features.equipment.description', + }, + { + title: 'home.about.features.staff.title', + description: 'home.about.features.staff.description', + }, +]; + +const Features = () => { + const { t } = useLanguage(); + + return ( +
+ {features.map(({ title, description }) => { + return ( +
+
+ +
+
+

{t(title)}

+

{t(description)}

+
+
+ ); + })} +
+ ); +}; diff --git a/src/widgets/charity-section.tsx b/src/widgets/charity-section.tsx index 3562f5e..44b943d 100644 --- a/src/widgets/charity-section.tsx +++ b/src/widgets/charity-section.tsx @@ -11,12 +11,12 @@ export const CharitySection = () => { const { t } = useLanguage(); return ( -
+
{
-

+

{t('home.charity.title')}

diff --git a/src/widgets/cta-section.tsx b/src/widgets/cta-section.tsx index 67df7e3..9faa576 100644 --- a/src/widgets/cta-section.tsx +++ b/src/widgets/cta-section.tsx @@ -1,14 +1,15 @@ 'use client'; +import Link from 'next/link'; + import { useLanguage } from '@/shared/language'; import { Button } from '@/shared/shadcn-ui/button'; -import Link from 'next/link'; export const CtaSection = () => { const { t } = useLanguage(); return ( -

+

diff --git a/src/widgets/footer.tsx b/src/widgets/footer.tsx index 773cd42..f09e22c 100644 --- a/src/widgets/footer.tsx +++ b/src/widgets/footer.tsx @@ -5,8 +5,6 @@ import Link from 'next/link'; import { useLanguage } from '@/shared/language'; -import '.././app/globals.css'; - export const Footer = () => { const { t } = useLanguage(); diff --git a/src/widgets/header/ui/index.tsx b/src/widgets/header/ui/index.tsx index 9baef64..71197f0 100644 --- a/src/widgets/header/ui/index.tsx +++ b/src/widgets/header/ui/index.tsx @@ -5,7 +5,7 @@ import Link from 'next/link'; import { Logo } from '@/shared/assets/logo'; import { useLanguage } from '@/shared/language'; -import { LanguageSwitcher } from '@/shared/language/ui/language-switcher'; +// import { LanguageSwitcher } from '@/shared/language/ui/language-switcher'; import { Button } from '@/shared/shadcn-ui/button'; import { DesktopNav } from './desktop-nav'; @@ -19,10 +19,10 @@ export function Header() {
-
+
-
- +
+ {/* */} - diff --git a/src/widgets/map-section.tsx b/src/widgets/map-section.tsx index 5e64426..90f5150 100644 --- a/src/widgets/map-section.tsx +++ b/src/widgets/map-section.tsx @@ -10,7 +10,7 @@ export const MapSection = () => { const { t } = useLanguage(); return ( -
+
diff --git a/src/widgets/partners-section.tsx b/src/widgets/partners-section.tsx index 08a7b29..f4ccadc 100644 --- a/src/widgets/partners-section.tsx +++ b/src/widgets/partners-section.tsx @@ -2,17 +2,16 @@ import { Handshake } from 'lucide-react'; import Image from 'next/image'; -import png from './7fe1595f25e868852247248389bc2b3ac910bf94.png' +import Link from 'next/link'; import { useLanguage } from '@/shared/language'; import { Button } from '@/shared/shadcn-ui/button'; -import Link from 'next/link'; export const PartnersSection = () => { const { t } = useLanguage(); return ( -
+
@@ -26,11 +25,11 @@ export const PartnersSection = () => {

-
+
{[1, 2, 3, 4, 5, 6, 7, 8].map((partner) => (
{ const { t } = useLanguage(); return ( -
+
diff --git a/src/widgets/stats-section.tsx b/src/widgets/stats-section.tsx index 405ddc3..e378960 100644 --- a/src/widgets/stats-section.tsx +++ b/src/widgets/stats-section.tsx @@ -35,9 +35,9 @@ export function StatsSection() { }, []); return ( -
+
-
+

{isVisible ? : '0+'} diff --git a/src/widgets/vacancies-section.tsx b/src/widgets/vacancies-section.tsx index 67022c2..7888fa8 100644 --- a/src/widgets/vacancies-section.tsx +++ b/src/widgets/vacancies-section.tsx @@ -3,6 +3,8 @@ import { Briefcase } from 'lucide-react'; import { useLanguage } from '@/shared/language'; +import { cn } from '@/shared/lib/utils'; +import { Badge } from '@/shared/shadcn-ui/badge'; import { Button } from '@/shared/shadcn-ui/button'; import { Card, CardContent } from '@/shared/shadcn-ui/card'; import { @@ -16,7 +18,7 @@ export const VacanciesSection = () => { const { t } = useLanguage(); return ( -
+
@@ -43,35 +45,12 @@ export const VacanciesSection = () => { 'Бухгалтер', 'Специалист по логистике', ].map((job, index) => ( - - -
-
-
-

{job}

-

- Душанбе, Таджикистан -

-
- - Полный день - - - Опыт от 1 года - -
-
- -
-
-
-
+ jobTitle={job} + location='Душанбе, Таджикистан' + tags={['Полный день', 'Опыт от 1 года']} + /> ))} @@ -80,69 +59,23 @@ export const VacanciesSection = () => { 'Бухгалтер', 'Специалист по логистике', ].map((job, index) => ( - - -
-
-
-

{job}

-

- Душанбе, Таджикистан -

-
- - Полный день - - - Опыт от 1 года - -
-
- -
-
-
-
+ jobTitle={job} + location='Душанбе, Таджикистан' + tags={['Полный день', 'Опыт от 1 года']} + /> ))}
{['Оператор АЗС', 'Заправщик', 'Менеджер станции'].map( (job, index) => ( - - -
-
-
-

{job}

-

- Душанбе, Таджикистан -

-
- - Сменный график - - - Обучение - -
-
- -
-
-
-
+ jobTitle={job} + location='Душанбе, Таджикистан' + tags={['Сменный график', 'Обучение']} + /> ), )}
@@ -151,3 +84,49 @@ export const VacanciesSection = () => {
); }; + +interface VacancyProps { + jobTitle: string; + location: string; + tags: Array; +} + +const Vacancy = ({ jobTitle, location, tags }: VacancyProps) => { + const { t } = useLanguage(); + + return ( + + +
+
+
+

{jobTitle}

+

{location}

+
+ {tags.map((tag, index) => { + return ( + + {tag} + + ); + })} +
+
+ +
+
+
+
+ ); +}; diff --git a/tailwind.config.js b/tailwind.config.js index 51632a4..7c49019 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,5 @@ /** @type {import('tailwindcss').Config} */ +import tailwindcssAnimated from 'tailwindcss-animated'; module.exports = { darkMode: ['class'], @@ -102,5 +103,5 @@ module.exports = { }, }, }, - plugins: [require('tailwindcss-animate')], + plugins: [require('tailwindcss-animate'), tailwindcssAnimated], };