+
Проекты
-
-
+
+
-
{projects.slice(0, 2).map(project => (
))}
+
{projects.slice(3).map(project => (
))}
@@ -31,14 +31,14 @@ function Project({
}: IProject & { className?: string }) {
return (
-
+
- (null);
+ const descriptionRef = useRef(null);
+ // const imgRef = useRef(null);
+
+ useEffect(() => {
+ setDescriptionHeight(descriptionRef.current?.clientHeight ?? 0);
+ }, [expanded, descriptionRef]);
+
return (
-
{title}
+{title}
{tags.map(tag => (
-
Повышаем количество посетителей на стенде,
@@ -96,7 +96,7 @@ function DesktopFeature({
+
diff --git a/src/components/Promotion.tsx b/src/components/Promotion.tsx
index 8a446f2..f005162 100644
--- a/src/components/Promotion.tsx
+++ b/src/components/Promotion.tsx
@@ -1,7 +1,7 @@
import { AnimatePresence, motion } from 'framer-motion';
import { Title } from './ui/Title';
import { promotionFeatures } from '../consts/promotionFeatures';
-import { useRef, useState } from 'react';
+import { useEffect, useRef, useState } from 'react';
import { useHover } from 'usehooks-ts';
import { useLocation } from 'react-router-dom';
import { hashes } from '../consts/motivationHashes';
@@ -16,7 +16,7 @@ export function Promotion() {
return (
-
))}
{tag}
+{tag}
setExpanded(prev => !prev)}
>
-
-
{title}
+
+ : }
@@ -169,7 +185,8 @@ function Feature({
{expanded && (
)}
-
+
);
}
diff --git a/src/components/Stands.tsx b/src/components/Stands.tsx
index 85df1ab..c0e2a8d 100644
--- a/src/components/Stands.tsx
+++ b/src/components/Stands.tsx
@@ -9,7 +9,7 @@ export function Stands() {
const width = useWindowWidth();
return (
-
{title}
+
+
{images.map((image, index) => (
))}
-
-
-
-
+
Мы разработчики с собственной
@@ -21,7 +21,7 @@ export function Stands() {
= 1024
? ['31.6vw', '31.8vw', '48vw', '48vw']
@@ -39,7 +39,7 @@ export function Stands() {
const Stand = forwardRef(
({ annotation, img, title, year }, ref) => {
return (
-
+
(
/>
);
diff --git a/src/components/Statistics.tsx b/src/components/Statistics.tsx
index aba4c61..ded9504 100644
--- a/src/components/Statistics.tsx
+++ b/src/components/Statistics.tsx
@@ -6,7 +6,7 @@ import { statistics } from '../consts/statistics';
export function Statistics() {
return (
-
-
{title}
-
+
- {title}
+{annotation}
{year}
+{year}
+
За 15 лет работы cоздали более
250 интерактивных проектов с 3D @@ -17,7 +17,7 @@ export function Statistics() {
))}
-
250 интерактивных проектов с 3D @@ -17,7 +17,7 @@ export function Statistics() {
+
{statistics.map(stat => (
))}
@@ -26,7 +26,7 @@ export function Statistics() {
);
}
-function Figure({ color, percents, size, title }: IStatisticsItem) {
+function Figure({ color, percents, height, title }: IStatisticsItem) {
const percentsValue = useMotionValue(0);
const percentsSpringValue = useSpring(percentsValue, {
damping: 100,
@@ -61,9 +61,9 @@ function Figure({ color, percents, size, title }: IStatisticsItem) {
useEffect(() => {
if (inView) {
- columnHeightValue.set(size);
+ columnHeightValue.set(height);
}
- }, [size, columnHeightValue, inView]);
+ }, [height, columnHeightValue, inView]);
useEffect(() => {
columnHeightSpringValue.on('change', prev => {
@@ -78,7 +78,7 @@ function Figure({ color, percents, size, title }: IStatisticsItem) {
ref={root}
className="relative flex flex-col gap-y-2 justify-end w-full h-[400px]"
>
- (0);
const percentsSpringValue = useSpring(percentsValue, {
damping: 100,
stiffness: 100,
});
- const columnWidthValue = useMotionValue(0);
- const columnWidthSpringValue = useSpring(columnWidthValue, {
+ const rowWidthValue = useMotionValue(0);
+ const rowWidthSpringValue = useSpring(rowWidthValue, {
damping: 100,
stiffness: 100,
});
const figureRef = useRef(null);
- const columnRef = useRef(null);
+ const rowRef = useRef(null);
const root = useRef(null);
const inView = useInView(root);
@@ -134,28 +139,28 @@ function MobileFigure({ color, percents, size, title }: IStatisticsItem) {
useEffect(() => {
if (inView) {
- columnWidthValue.set(size);
+ rowWidthValue.set(widthPercents);
}
- }, [size, columnWidthValue, inView]);
+ }, [widthPercents, rowWidthValue, inView]);
useEffect(() => {
- columnWidthSpringValue.on('change', prev => {
- if (columnRef.current) {
- columnRef.current!.style.width = `${prev}px`;
+ rowWidthSpringValue.on('change', prev => {
+ if (rowRef.current) {
+ rowRef.current!.style.width = `${prev}%`;
}
});
- }, [columnWidthSpringValue, columnRef, percentsSpringValue]);
+ }, [rowWidthSpringValue, rowRef, percentsSpringValue]);
return (
-
-
);
}
diff --git a/src/components/icons/ArrowLeftIcon.tsx b/src/components/icons/ArrowLeftIcon.tsx
index c8dc01e..7e4d69f 100644
--- a/src/components/icons/ArrowLeftIcon.tsx
+++ b/src/components/icons/ArrowLeftIcon.tsx
@@ -9,8 +9,8 @@ export function ArrowLeftIcon() {
>
diff --git a/src/components/icons/ArrowRightIcon.tsx b/src/components/icons/ArrowRightIcon.tsx
index 83c9654..6361831 100644
--- a/src/components/icons/ArrowRightIcon.tsx
+++ b/src/components/icons/ArrowRightIcon.tsx
@@ -9,8 +9,8 @@ export function ArrowRightIcon() {
>
diff --git a/src/components/icons/ChevronUpIcon.tsx b/src/components/icons/ChevronUpIcon.tsx
index 1abfc7e..80a4d71 100644
--- a/src/components/icons/ChevronUpIcon.tsx
+++ b/src/components/icons/ChevronUpIcon.tsx
@@ -8,8 +8,8 @@ export function ChevronUpIcon() {
xmlns="http://www.w3.org/2000/svg"
>
diff --git a/src/components/icons/Logo.tsx b/src/components/icons/Logo.tsx
index 9ce8493..9a0af70 100644
--- a/src/components/icons/Logo.tsx
+++ b/src/components/icons/Logo.tsx
@@ -7,10 +7,10 @@ export function Logo() {
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
-
+
@@ -22,67 +22,67 @@ export function Logo() {
opacity="0.3"
d="M17.8381 8.1714C18.5991 8.03426 19.3832 7.95426 20.1903 7.95426V0H20.1673C18.5415 0 16.9618 0.182857 15.4512 0.537141L17.8381 8.1714Z"
fill="black"
- fill-opacity="0.6"
+ fillOpacity="0.6"
/>
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/src/components/icons/LogoWithoutText.tsx b/src/components/icons/LogoWithoutText.tsx
index c66b142..44ae0f7 100644
--- a/src/components/icons/LogoWithoutText.tsx
+++ b/src/components/icons/LogoWithoutText.tsx
@@ -8,8 +8,8 @@ export function LogoWithoutText() {
xmlns="http://www.w3.org/2000/svg"
>
@@ -21,67 +21,67 @@ export function LogoWithoutText() {
opacity="0.3"
d="M14.1721 6.49428C14.766 6.38081 15.3793 6.32141 16.0065 6.32141V0H15.985C14.7151 0 13.4796 0.146971 12.2949 0.424748L14.1721 6.49428Z"
fill="black"
- fill-opacity="0.6"
+ fillOpacity="0.6"
/>
-
-
+
+
diff --git a/src/components/icons/TelegramIcon.tsx b/src/components/icons/TelegramIcon.tsx
index 10dc8d3..3d5f9bf 100644
--- a/src/components/icons/TelegramIcon.tsx
+++ b/src/components/icons/TelegramIcon.tsx
@@ -9,8 +9,8 @@ export function TelegramIcon() {
>
diff --git a/src/components/icons/VKIcon.tsx b/src/components/icons/VKIcon.tsx
index 8394025..3079b58 100644
--- a/src/components/icons/VKIcon.tsx
+++ b/src/components/icons/VKIcon.tsx
@@ -9,8 +9,8 @@ export function VKIcon() {
>
diff --git a/src/components/icons/YoutubeIcon.tsx b/src/components/icons/YoutubeIcon.tsx
index d805052..9945eac 100644
--- a/src/components/icons/YoutubeIcon.tsx
+++ b/src/components/icons/YoutubeIcon.tsx
@@ -9,8 +9,8 @@ export function YoutubeIcon() {
>
diff --git a/src/consts/statistics.ts b/src/consts/statistics.ts
index 02b9f1f..f8a1543 100644
--- a/src/consts/statistics.ts
+++ b/src/consts/statistics.ts
@@ -5,30 +5,35 @@ export const statistics: IStatisticsItem[] = [
color: '#D375FF',
percents: 15,
title: 'AR',
- columnWidth: 224,
+ height: 224,
+ widthPercents: 67,
},
{
color: '#79FFA6',
percents: 62,
title: 'VR',
- columnWidth: 301,
+ height: 301,
+ widthPercents: 90,
},
{
color: '#9E75FF',
percents: 97,
title: '3D интерактив',
- columnWidth: 373,
+ height: 373,
+ widthPercents: 100,
},
{
color: '#FF7575',
percents: 64,
- title: 'Интеактивные макеты',
- columnWidth: 301,
+ title: 'Интерактивные макеты',
+ height: 301,
+ widthPercents: 90,
},
{
color: '#8F95FF',
percents: 12,
title: 'Мобильные приложения',
- columnWidth: 246,
+ height: 246,
+ widthPercents: 75,
},
];
diff --git a/src/types/IStatisticsItem.ts b/src/types/IStatisticsItem.ts
index fc1ca85..24087fe 100644
--- a/src/types/IStatisticsItem.ts
+++ b/src/types/IStatisticsItem.ts
@@ -2,5 +2,6 @@ export interface IStatisticsItem {
title: string;
color: string;
percents: number;
- size: number;
+ widthPercents: number;
+ height: number;
}
+
{title}
- {title} -
+{percents}
++ {title} +