+
За 15 лет работы cоздали более
250 интерактивных проектов с 3D
графикой
- {statistics.map(Figure)}
+ {statistics.map(stat => (
+
+ ))}
);
diff --git a/src/components/icons/CloseIcon.tsx b/src/components/icons/CloseIcon.tsx
new file mode 100644
index 0000000..9b848c3
--- /dev/null
+++ b/src/components/icons/CloseIcon.tsx
@@ -0,0 +1,19 @@
+export function CloseIcon() {
+ return (
+
+ );
+}
diff --git a/src/consts/devices.ts b/src/consts/devices.ts
new file mode 100644
index 0000000..69af701
--- /dev/null
+++ b/src/consts/devices.ts
@@ -0,0 +1,52 @@
+import { IDevice } from '../types/IDevice';
+
+export const devices: IDevice[] = [
+ {
+ title: 'Интерактивные экраны',
+ description: [
+ 'За счет высокого разрешение, яркости и широкого угла обзора светодиодные стены четко и ярко отображают контент.',
+ 'Их используют на выставках, мероприятиях и в коммерческих пространствах, где нужно выделиться и оставить яркое впечатление.',
+ ],
+ img: '/src/assets/devices/interactive.png',
+ },
+ {
+ title: 'Светодиодные стены',
+ description: [
+ 'За счет высокого разрешение, яркости и широкого угла обзора светодиодные стены четко и ярко отображают контент.',
+ 'Их используют на выставках, мероприятиях и в коммерческих пространствах, где нужно выделиться и оставить яркое впечатление.',
+ ],
+ img: '/src/assets/devices/led.png',
+ },
+ {
+ title: 'Проекционные экраны',
+ description: [
+ 'За счет высокого разрешение, яркости и широкого угла обзора светодиодные стены четко и ярко отображают контент.',
+ 'Их используют на выставках, мероприятиях и в коммерческих пространствах, где нужно выделиться и оставить яркое впечатление.',
+ ],
+ img: '/src/assets/devices/projection.png',
+ },
+ {
+ title: 'Транспарентные экраны',
+ description: [
+ 'За счет высокого разрешение, яркости и широкого угла обзора светодиодные стены четко и ярко отображают контент.',
+ 'Их используют на выставках, мероприятиях и в коммерческих пространствах, где нужно выделиться и оставить яркое впечатление.',
+ ],
+ img: '/src/assets/devices/transparent.png',
+ },
+ {
+ title: 'Голографические пирамиды',
+ description: [
+ 'За счет высокого разрешение, яркости и широкого угла обзора светодиодные стены четко и ярко отображают контент.',
+ 'Их используют на выставках, мероприятиях и в коммерческих пространствах, где нужно выделиться и оставить яркое впечатление.',
+ ],
+ img: '/src/assets/devices/holographic.png',
+ },
+ {
+ title: 'Мобильные устройства',
+ description: [
+ 'За счет высокого разрешение, яркости и широкого угла обзора светодиодные стены четко и ярко отображают контент.',
+ 'Их используют на выставках, мероприятиях и в коммерческих пространствах, где нужно выделиться и оставить яркое впечатление.',
+ ],
+ img: '/src/assets/devices/mobile.png',
+ },
+];
diff --git a/src/index.css b/src/index.css
index 79a0c37..9e36cec 100644
--- a/src/index.css
+++ b/src/index.css
@@ -43,9 +43,9 @@ body {
/* leading-[clamp(17.6px,17.6px+(100vw-360px)/1240*6.4,24px)]; */;
}
- /* .accent {
+ .accent {
@apply -tracking-[.02em] md:text-[clamp(28px,28px+(100vw-768px)/832*4,32px)] text-[clamp(20px,20px+(100vw-360px)/408*8,28px)] md:leading-[clamp(28px,28px+(100vw-768px)/832*7.2,35.2px)] leading-[clamp(20px,20px+(100vw-360px)/408*8,28px)];
- } */
+ }
.l-text {
@apply text-[clamp(14px,14px+(100vw-360px)/1240*6,20px)] leading-[135%]
@@ -59,11 +59,11 @@ body {
/* .l-caption {
@apply text-[clamp(14px,14px+(100vw-360px)/1240*2,16px)] leading-none;
- }
+ } */
.m-caption {
@apply text-[clamp(10px,10px+(100vw-360px)/1240*2,12px)] leading-[clamp(12px,12px+(100vw-360px)/1240*2.4,14.4px)];
- } */
+ }
.btn-text {
@apply -tracking-[.01em] text-[clamp(12px,12px+(100vw-360px)/1240*8,20px)] leading-none;
diff --git a/src/main.tsx b/src/main.tsx
index e43fc00..6b5281b 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,7 +1,7 @@
import { createRoot } from 'react-dom/client';
import './index.css';
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
-import { Layout } from './Layout';
+import { Layout } from './components/Layout';
import { MainPage } from './pages/MainPage';
createRoot(document.getElementById('root')!).render(
diff --git a/src/pages/MainPage.tsx b/src/pages/MainPage.tsx
index e722484..262f175 100644
--- a/src/pages/MainPage.tsx
+++ b/src/pages/MainPage.tsx
@@ -4,16 +4,18 @@ import { Projects } from '../components/Projects';
import { Promotion } from '../components/Promotion';
import { Statistics } from '../components/Statistics';
import { Form } from '../components/Form';
+import { Devices } from '../components/Devices';
export function MainPage() {
return (
- <>
+
);
}
diff --git a/src/stores/modalStore.ts b/src/stores/modalStore.ts
new file mode 100644
index 0000000..2a73079
--- /dev/null
+++ b/src/stores/modalStore.ts
@@ -0,0 +1,12 @@
+import { ReactNode } from 'react';
+import { create } from 'zustand';
+
+interface IModalState {
+ modal: ReactNode | null;
+ setModal: (modal: ReactNode) => void;
+}
+
+export const useModalStore = create
(set => ({
+ modal: null,
+ setModal: modal => set({ modal }),
+}));
diff --git a/src/types/IDevice.ts b/src/types/IDevice.ts
new file mode 100644
index 0000000..b769794
--- /dev/null
+++ b/src/types/IDevice.ts
@@ -0,0 +1,5 @@
+export interface IDevice {
+ title: string;
+ description: string[];
+ img: string;
+}
diff --git a/yarn.lock b/yarn.lock
index 53b9732..0977e4c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2028,6 +2028,11 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
+use-sync-external-store@1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9"
+ integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==
+
usehooks-ts@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/usehooks-ts/-/usehooks-ts-3.1.0.tgz#156119f36efc85f1b1952616c02580f140950eca"
@@ -2102,3 +2107,10 @@ yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zustand@^4.5.5:
+ version "4.5.5"
+ resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.5.tgz#f8c713041543715ec81a2adda0610e1dc82d4ad1"
+ integrity sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==
+ dependencies:
+ use-sync-external-store "1.2.2"