From b441bfde8d5ef26a1b31cc6914eb2ca7adc5b60a Mon Sep 17 00:00:00 2001 From: OkunElya Date: Mon, 13 Apr 2026 18:06:00 +1000 Subject: [PATCH] lab6 done --- labs/lab6/README.md | 4 +- labs/lab6/package-lock.json | 130 +++++++++++++++++++--- labs/lab6/package.json | 4 + labs/lab6/src/App.tsx | 14 ++- labs/lab6/src/components/BuildCard.tsx | 53 +++++++++ labs/lab6/src/components/Content.tsx | 21 ++++ labs/lab6/src/components/CustomFooter.tsx | 26 +++++ labs/lab6/src/components/Gallery.tsx | 41 +++++++ labs/lab6/src/components/Navbar.jsx | 35 ------ labs/lab6/src/components/Navbar.tsx | 105 +++++++++++++++++ labs/lab6/src/data.tsx | 118 ++++++++++++++++++++ labs/lab6/vite.config.ts | 8 +- 12 files changed, 502 insertions(+), 57 deletions(-) create mode 100644 labs/lab6/src/components/BuildCard.tsx create mode 100644 labs/lab6/src/components/Content.tsx create mode 100644 labs/lab6/src/components/CustomFooter.tsx create mode 100644 labs/lab6/src/components/Gallery.tsx delete mode 100644 labs/lab6/src/components/Navbar.jsx create mode 100644 labs/lab6/src/components/Navbar.tsx create mode 100644 labs/lab6/src/data.tsx diff --git a/labs/lab6/README.md b/labs/lab6/README.md index 7dbf7eb..c3c21da 100644 --- a/labs/lab6/README.md +++ b/labs/lab6/README.md @@ -9,7 +9,9 @@ Currently, two official plugins are available: ## React Compiler -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). +The React Compiler is enabled on this template. See [this documentation](https://react.dev/learn/react-compiler) for more information. + +Note: This will impact Vite dev & build performances. ## Expanding the ESLint configuration diff --git a/labs/lab6/package-lock.json b/labs/lab6/package-lock.json index 74482a4..4241f50 100644 --- a/labs/lab6/package-lock.json +++ b/labs/lab6/package-lock.json @@ -16,11 +16,15 @@ "react-dom": "^19.2.4" }, "devDependencies": { + "@babel/core": "^7.29.0", "@eslint/js": "^9.39.4", + "@rolldown/plugin-babel": "^0.2.2", + "@types/babel__core": "^7.20.5", "@types/node": "^24.12.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", + "babel-plugin-react-compiler": "^1.0.0", "eslint": "^9.39.4", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.5.2", @@ -1257,6 +1261,37 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@rolldown/plugin-babel": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@rolldown/plugin-babel/-/plugin-babel-0.2.2.tgz", + "integrity": "sha512-q9pE8+47bQNHb5eWVcE6oXppA+JTSwvnrhH53m0ZuHuK5MLvwsLoWrWzBTFQqQ06BVxz1gp0HblLsch8o6pvZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=22.12.0 || ^24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.29.0 || ^8.0.0-rc.1", + "@babel/plugin-transform-runtime": "^7.29.0 || ^8.0.0-rc.1", + "@babel/runtime": "^7.27.0 || ^8.0.0-rc.1", + "rolldown": "^1.0.0-rc.5", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@babel/plugin-transform-runtime": { + "optional": true + }, + "@babel/runtime": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-rc.7", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", @@ -1275,6 +1310,51 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1738,6 +1818,16 @@ "npm": ">=6" } }, + "node_modules/babel-plugin-react-compiler": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", + "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1746,9 +1836,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz", - "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==", + "version": "2.10.18", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz", + "integrity": "sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1759,9 +1849,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1984,9 +2074,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.334", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", - "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", + "version": "1.5.335", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.335.tgz", + "integrity": "sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q==", "dev": true, "license": "ISC" }, @@ -1999,6 +2089,15 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2349,9 +2448,9 @@ } }, "node_modules/globals": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", - "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz", + "integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==", "dev": true, "license": "MIT", "engines": { @@ -3226,11 +3325,12 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" diff --git a/labs/lab6/package.json b/labs/lab6/package.json index b856a2b..4623aa0 100644 --- a/labs/lab6/package.json +++ b/labs/lab6/package.json @@ -18,11 +18,15 @@ "react-dom": "^19.2.4" }, "devDependencies": { + "@babel/core": "^7.29.0", "@eslint/js": "^9.39.4", + "@rolldown/plugin-babel": "^0.2.2", + "@types/babel__core": "^7.20.5", "@types/node": "^24.12.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", + "babel-plugin-react-compiler": "^1.0.0", "eslint": "^9.39.4", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.5.2", diff --git a/labs/lab6/src/App.tsx b/labs/lab6/src/App.tsx index 02311e9..e4509de 100644 --- a/labs/lab6/src/App.tsx +++ b/labs/lab6/src/App.tsx @@ -1,12 +1,18 @@ -import { useState } from 'react' -import logo from './images/logo.svg' -import NavBar from './components/Navbar.jsx' +import NavBar from './components/Navbar' +import Gallery from "./components/Gallery"; +import Content from "./components/Content"; +import CustomFooter from "./components/CustomFooter"; + + import './styles/App.css' function App() { return ( <> - + + + + ) } diff --git a/labs/lab6/src/components/BuildCard.tsx b/labs/lab6/src/components/BuildCard.tsx new file mode 100644 index 0000000..61c1afa --- /dev/null +++ b/labs/lab6/src/components/BuildCard.tsx @@ -0,0 +1,53 @@ +import Card from '@mui/material/Card'; +import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; +import CardMedia from '@mui/material/CardMedia'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import { styled } from '@mui/material/styles'; +interface ComponentProps { + building: { + img: string, + title: string, + description: string[] + }, + cardNum: number; + } + + + const StyledTypography = styled(Typography)(({ theme }) => ({ + color: theme.palette.text.secondary, + textAlign: 'justify', + marginBottom: '1em', + })); + + +function BuildCard({ building,cardNum} : ComponentProps) { + return ( + + + + + + { building.title } + + { building.description.map((item, ind) => ( + + { item } + + ))} + + + + + + + ) +} + +export default BuildCard; \ No newline at end of file diff --git a/labs/lab6/src/components/Content.tsx b/labs/lab6/src/components/Content.tsx new file mode 100644 index 0000000..2d8c277 --- /dev/null +++ b/labs/lab6/src/components/Content.tsx @@ -0,0 +1,21 @@ +import Container from '@mui/material/Container'; +import Grid from '@mui/material/Grid'; +import structures from "../data"; +import BuildCard from "./BuildCard" +const cardData = [structures[3], structures[6], structures[9], structures[7]] + +function Content() { + return ( + + + {cardData.map((item, index) => ( + + + + ))} + + + ); +} + +export default Content; \ No newline at end of file diff --git a/labs/lab6/src/components/CustomFooter.tsx b/labs/lab6/src/components/CustomFooter.tsx new file mode 100644 index 0000000..1b51991 --- /dev/null +++ b/labs/lab6/src/components/CustomFooter.tsx @@ -0,0 +1,26 @@ +import Container from '@mui/material/Container'; +import Grid from '@mui/material/Grid'; +import Typography from '@mui/material/Typography'; +import { styled } from '@mui/material/styles'; + +const StyledContainer = styled(Container)(({ theme }) => ({ + backgroundColor: theme.palette.action.hover, + borderRadius: `calc(${theme.shape.borderRadius}px + 8px)`, + marginTop: "50px", + padding: "20px", + color: theme.palette.text.secondary +})); + +function CustomFooter() { + return ( + + + OkunElya + 2026 + FEFU + + + ); +} + +export default CustomFooter; \ No newline at end of file diff --git a/labs/lab6/src/components/Gallery.tsx b/labs/lab6/src/components/Gallery.tsx new file mode 100644 index 0000000..23c44ac --- /dev/null +++ b/labs/lab6/src/components/Gallery.tsx @@ -0,0 +1,41 @@ +import ImageList from '@mui/material/ImageList'; +import ImageListItem from '@mui/material/ImageListItem'; +import structures from "../data"; +import Box from '@mui/material/Box'; +import Container from '@mui/material/Container'; +import ImageListItemBar from '@mui/material/ImageListItemBar'; +const imgData = structures.slice(0, -1); + +function Gallery() { + return ( + + + + {imgData.map((item) => ( + + {item.title} + + + ))} + + + + ); +} + +export default Gallery; \ No newline at end of file diff --git a/labs/lab6/src/components/Navbar.jsx b/labs/lab6/src/components/Navbar.jsx deleted file mode 100644 index 6ff9902..0000000 --- a/labs/lab6/src/components/Navbar.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import AppBar from '@mui/material/AppBar'; -import Toolbar from '@mui/material/Toolbar'; -import { styled } from '@mui/material/styles'; -import Container from '@mui/material/Container'; - -const StyledToolbar = styled(Toolbar)(({ theme }) => ({ - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', - flexShrink: 0, - borderRadius: `calc(${theme.shape.borderRadius}px + 8px)`, - border: '1px solid', - borderColor: theme.palette.divider, - padding: '8px 12px', -})); - -function NavBar() { - return ( - - - - - - - - ); -} -export default NavBar; \ No newline at end of file diff --git a/labs/lab6/src/components/Navbar.tsx b/labs/lab6/src/components/Navbar.tsx new file mode 100644 index 0000000..8498b22 --- /dev/null +++ b/labs/lab6/src/components/Navbar.tsx @@ -0,0 +1,105 @@ +import AppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import { styled } from '@mui/material/styles'; +import Container from '@mui/material/Container'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import IconButton from '@mui/material/IconButton'; +import CloseRoundedIcon from '@mui/icons-material/CloseRounded'; +import MenuItem from '@mui/material/MenuItem'; +import Drawer from '@mui/material/Drawer'; +import MenuIcon from '@mui/icons-material/Menu'; +import MenuList from '@mui/material/MenuList'; + +import { useState } from 'react'; + + +const StyledToolbar = styled(Toolbar)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + flexShrink: 0, + borderRadius: `calc(${theme.shape.borderRadius}px + 8px)`, + border: '1px solid', + borderColor: theme.palette.divider, + padding: '8px 12px', +})); + + +const StyledMenuItem =styled(MenuItem)(({}) => ({ + '&.Mui-selected': { + backgroundColor: '#1976d2', + color: "white", + }, + '&.Mui-selected:hover': { + backgroundColor: '#11579c', + color: "white", + }, + '&:hover': { + backgroundColor: 'rgba(69, 146, 223, 0.45)', + }, + +})); +interface ComponentProps { + active: string; +} + +function NavBar({ active }: ComponentProps) { + const [open, setOpen] = useState(false); + + const toggleDrawer = (newOpen: boolean) => () => { + setOpen(newOpen); + }; + return ( + + + + + Самые высокие здания и сооружения + + + + + + + + + + + + + + + + + + Главная + Список зданий + Контакты + + + + + + + ); +} +export default NavBar; \ No newline at end of file diff --git a/labs/lab6/src/data.tsx b/labs/lab6/src/data.tsx new file mode 100644 index 0000000..a3cd105 --- /dev/null +++ b/labs/lab6/src/data.tsx @@ -0,0 +1,118 @@ +import Image1 from './images/image1.jpg'; +import Image2 from './images/image2.jpg'; +import Image3 from './images/image3.jpg'; +import Image4 from './images/image4.jpg'; +import Image5 from './images/image5.jpg'; +import Image6 from './images/image6.jpg'; +import Image7 from './images/image7.jpg'; +import Image8 from './images/image8.jpg'; +import Image9 from './images/image9.jpg'; +import Image10 from './images/image10.jpg'; + +const structures = [ + { + img: Image1, + title: "Раффлз-Сити, Китай", + description: [ + `Раффлз-Сити — комплекс небоскрёбов, расположенный в китайском городе Чунцин, в деловом районе Юйчжун. Построен в 2019 году. Архитекторами комплекса выступили Моше Сафди и Чунцинский архитектурный институт, владельцем является сингапурская группа CapitaLand.`, + `В состав многофункционального комплекса Раффлз-Сити входят восемь высотных башен и обширный подиум, в котором располагаются продуктовый супермаркет, магазины, автосалоны, рестораны, выставочные залы и паркинг. Общая площадь комплекса — свыше 1,1 млн м², + в том числе пятиэтажный торговый центр — 230 тыс. м², офисы — 160 тыс. м² и мультиплекс сети CGV — 5,6 тыс. м². В одной из 350-метровых башен Раффлз-Сити расположен пятизвёздочный отель InterContinental, + также в комплексе насчитывается 1,4 тыс. жилых апартаментов сети Ascott и 26,4 тыс. парковочных мест.` + ], + }, + { + img: Image2, + title: "Авичи-Арена, Швеция", + description: [ + `Авичи-Арена - 85-метровая многоцелевая арена в Стокгольме. Второе по величине сферическое сооружение в мире. Место проведения концертов и спортивных мероприятий. + Арена находится в микрорайоне Глобен-Сити, созданном специально для неё. Имеет вместимость 16 000 человек во время концертов и 13 850 во время хоккейных матчей.`, + `Арена была построена специально к чемпионату мира по хоккею 1989 года и открыта 19 февраля 1989 года. Олицетворяет собой Солнце в Шведской Солнечной системе, крупнейшей в мире модели Солнечной системы.` + ] + }, + { + img: Image3, + title: "Труба ГРЭС-2, Казахстан", + description: [ + `Железобетонная дымовая труба, построенная в 1987 году, имея высоту 420 м, является самой высокой в мире и занесена в Книгу рекордов Гиннесса. + Суммарная масса трубы составляет 60 тысяч тонн, её диаметр у основания составляет 44 м, диаметр устья — 14,2 м.`, + `ГРЭС-2 вырабатывает электроэнергию из высокозольного экибастузского угля двумя энергоблоками по 500 МВт, имеет установленную мощность 1000 МВт. Два её энергоблока вырабатывают около 12 % всей электроэнергии, + производимой в республике. Энергия ГРЭС-2 предназначена для обеспечения севера Казахстана. Потребителями являются десятки предприятий не только Казахстана, но и России.` + ] + }, + { + img: Image4, + title: 'Бурдж-Халифа, Дубай, ОАЭ', + description: [ + `Небоскрёб высотой 828 метров, самое высокое сооружение в мире. Форма здания напоминает сталагмит.`, + `Строительство небоскрёба началось в 2004 году и шло со скоростью 1—2 этажа в неделю. Ежедневно на строительстве работало до 12 000 рабочих. + На его создание ушло около 320 тыс. м³ бетона и более 60 тыс. тонн стальной арматуры. + Бетонные работы были завершены после возведения 160 этажа, далее шла сборка 180-метрового шпиля из металлических конструкций.` + ] + }, + { + img: Image5, + title: "Интинская радиомачта, Инта, Россия", + description: [ + `На подъезде к железнодорожной станции Инта 1, кроме величественных вершин Урала, бросается в глаза металлическая вышка-мачта высотой 462,8 метра. + Она больше чем знаменитая Эйфелева башня, но меньше на 77 метров, чем телевизионная Останкинская в Москве. Антенна навигационной системы «Чайка» предназначена + для определения координат самолётов и кораблей с погрешностью 50–100 метров. Вышка-мачта находится на территории действующей военной части.`, + `По конструкции это классическая GP антенна. Длинна волны передачи - приёма кратна высоте. Планировалось, чтотакие антенны должны были быть построены в нескольких + точках по Полярному кругу.` + ] + }, + { + img: Image6, + title: "Ворота Запада, США", + description: [ + `Арка в Сент-Луисе, также известная под именем «Врата на запад» — мемориал, являющийся частью Джефферсоновского национального экспансиального мемориала, а также визитной карточкой Сент-Луиса, штат Миссури, США.`, + `Арка была спроектирована финско-американским архитектором Ээро Саариненом в 1947 году. Её высота 192 метра в самой высокой точке, ширина её основания также 192 метра. + Таким образом арка является самым высоким памятником на территории США. Её строительство началось 12 февраля 1963 года и было закончено 28 октября 1965 года. Памятник открылся для посетителей 24 июля 1967 года.` + ] + }, + { + img: Image7, + title: 'CN Tower, Торонто, Канада', + description: [ + `553.3-метровая телевизионная башня. Была самым высоким свободно стоящим сооружением в мире с 1976 по 2007 год, до сих пор остаётся + таковым в Западном полушарии. Является символом Торонто. На высоте 447 м находится астрономическая обсерватория.`, + `Земляные работы для сооружения железобетонной конструкции с последующим натяжением арматуры весом 130 000т начались 12 февраля 1973 г., + а уже 2 апреля 1975 г. возведение башни было завершено.` + ] + }, + { + img: Image8, + title: 'Небесное дерево, Токио, Япония', + description: [ + `Телевизионная башня в районе Сумида самая высокая среди телебашен мира. Высота телебашни вместе с антенной составляет 634 метра. + Высота башни была выбрана так, чтобы цифры: 6 (на старом японском «му»), 3 («са»), 4 («си») были созвучны «Мусаси» — названию исторической области, + где находится современный Токио.`, + `Здание напоминает пятиярусную пагоду, что хорошо сочетается с историческим районом Асакуса на другом берегу реки. + Основание башни напоминает штатив; с высоты примерно 350 м она имеет цилиндрическую форму, позволяющую наслаждаться панорамными видами реки и города.` + ] + }, + { + img: Image9, + title: 'The Clock Towers, Мекка, Саудовская Аравия', + description: [ + `Отель «Королевская часовая башня» имеет высоту 601 м. Его строительство которого завершилось в 2012 году. Внешне здание отдалённо напоминает Биг-Бен в Лондоне, + при этом выше последнего в 6 раз.`, + `На Королевской башне установлены часы диаметром 43 метра (длина часовой стрелки составляет 17 метров, минутной — 22), + расположенные на высоте более 400 метров над землёй. Четыре их циферблата установлены по четырём сторонам света. Часы видны из любого места города, + и являются самыми большими и самыми высотными часами в мире` + ] + }, + { + img: Image10, + title: 'Merdeka 118, Куала-Лумпур, Малайзия', + description: [ + `Общая высота здания составляет 678.9 м, причём более 160 м приходится на шпиль. Строительство Merdeka 118 началось в 2014 году.`, + `Название «Merdeka» означает «независимость», оно отсылает к наименованию расположенного рядом с башней стадиона, + который известен как место официального провозглашения независимости.`, + `Здание находится в центре Куала-Лумпура. В небоскрёбе откроется первый отель Park Hyatt в Малайзии. + Также в здании будут расположены самая высокая смотровая площадка в Юго-Восточной Азии, торговый центр, музей, мечеть, офисы и квартиры.` + ] + }, + +]; + +export default structures; \ No newline at end of file diff --git a/labs/lab6/vite.config.ts b/labs/lab6/vite.config.ts index 8b0f57b..d1203cd 100644 --- a/labs/lab6/vite.config.ts +++ b/labs/lab6/vite.config.ts @@ -1,7 +1,11 @@ import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import react, { reactCompilerPreset } from '@vitejs/plugin-react' +import babel from '@rolldown/plugin-babel' // https://vite.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [ + react(), + babel({ presets: [reactCompilerPreset()] }) + ], })