From 3de4d0aa6751f3547cd94543573d116450d9ae11 Mon Sep 17 00:00:00 2001 From: dianakuprava Date: Sat, 19 Jul 2025 05:40:18 +0300 Subject: [PATCH 1/6] feat: add Ticket components and logic --- package-lock.json | 60 ++++++++++++---- package.json | 2 + postcss.config.js | 6 +- src/entities/Ticket/index.ts | 3 + src/entities/Ticket/model/constants.ts | 33 +++++++++ src/entities/Ticket/model/types.ts | 31 +++++++++ src/entities/Ticket/ui/RouteInfo.tsx | 53 ++++++++++++++ src/entities/Ticket/ui/SeatsLeft.tsx | 12 ++++ src/entities/Ticket/ui/TariffsSection.tsx | 84 +++++++++++++++++++++++ src/entities/Ticket/ui/TicketCard.tsx | 28 ++++++++ src/entities/Ticket/ui/TicketHeader.tsx | 23 +++++++ src/index.css | 2 + src/main.tsx | 2 +- src/pages/homePage/HomePage.tsx | 11 ++- src/pages/index.ts | 2 +- src/shared/ui/icons/AirplaneLanding.tsx | 24 +++++++ src/shared/ui/icons/AirplaneTakeoff.tsx | 23 +++++++ src/shared/ui/icons/Armchair.tsx | 28 ++++++++ src/shared/ui/icons/ArrowsClockwise.tsx | 33 +++++++++ src/shared/ui/icons/Backpack.tsx | 42 ++++++++++++ src/shared/ui/icons/CarretDown.tsx | 20 ++++++ src/shared/ui/icons/Line.tsx | 21 ++++++ src/shared/ui/icons/LogoIcon.tsx | 44 ++++++++++++ src/shared/ui/icons/Suitcase.tsx | 26 +++++++ src/shared/ui/icons/WarningCircle.tsx | 30 ++++++++ src/shared/ui/icons/index.ts | 10 +++ src/shared/ui/index.ts | 0 tailwind.config.js | 11 ++- vite.config.ts | 4 +- 29 files changed, 643 insertions(+), 25 deletions(-) create mode 100644 src/entities/Ticket/index.ts create mode 100644 src/entities/Ticket/model/constants.ts create mode 100644 src/entities/Ticket/model/types.ts create mode 100644 src/entities/Ticket/ui/RouteInfo.tsx create mode 100644 src/entities/Ticket/ui/SeatsLeft.tsx create mode 100644 src/entities/Ticket/ui/TariffsSection.tsx create mode 100644 src/entities/Ticket/ui/TicketCard.tsx create mode 100644 src/entities/Ticket/ui/TicketHeader.tsx create mode 100644 src/shared/ui/icons/AirplaneLanding.tsx create mode 100644 src/shared/ui/icons/AirplaneTakeoff.tsx create mode 100644 src/shared/ui/icons/Armchair.tsx create mode 100644 src/shared/ui/icons/ArrowsClockwise.tsx create mode 100644 src/shared/ui/icons/Backpack.tsx create mode 100644 src/shared/ui/icons/CarretDown.tsx create mode 100644 src/shared/ui/icons/Line.tsx create mode 100644 src/shared/ui/icons/LogoIcon.tsx create mode 100644 src/shared/ui/icons/Suitcase.tsx create mode 100644 src/shared/ui/icons/WarningCircle.tsx create mode 100644 src/shared/ui/icons/index.ts create mode 100644 src/shared/ui/index.ts diff --git a/package-lock.json b/package-lock.json index efbd0e6..ee4adda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "clsx": "^2.1.1", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-icons": "^5.5.0", "react-router-dom": "^7.6.3", "sass": "^1.89.2", "tailwind-merge": "^3.3.1" @@ -31,6 +32,7 @@ "globals": "^16.2.0", "postcss": "^8.5.6", "prettier": "^3.6.2", + "sass": "^1.89.2", "tailwindcss": "^4.1.11", "typescript": "~5.8.3", "typescript-eslint": "^8.34.1", @@ -73,9 +75,9 @@ } }, "node_modules/@ant-design/cssinjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.23.0.tgz", - "integrity": "sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.24.0.tgz", + "integrity": "sha512-K4cYrJBsgvL+IoozUXYjbT6LHHNt+19a9zkvpBPxLjFHas1UpPM2A5MlhROb0BT8N8WoavM5VsP9MeSeNK/3mg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", @@ -1147,6 +1149,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1186,6 +1189,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1206,6 +1210,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1226,6 +1231,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1246,6 +1252,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1266,6 +1273,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1286,6 +1294,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1306,6 +1315,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1326,6 +1336,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1346,6 +1357,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1366,6 +1378,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1386,6 +1399,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1406,6 +1420,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1426,6 +1441,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1443,6 +1459,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, "license": "Apache-2.0", "optional": true, "bin": { @@ -2587,9 +2604,9 @@ } }, "node_modules/antd": { - "version": "5.26.4", - "resolved": "https://registry.npmjs.org/antd/-/antd-5.26.4.tgz", - "integrity": "sha512-e1EnOvEkvvqcQ18dxfzChBJyJACyih13WpNf2OtnP9z2POh/SF0fXL+ynUemT1zfr+p+P1po/tmHXaMc5PMghg==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.26.5.tgz", + "integrity": "sha512-HB7Cr0tPZMMeAyDDH8KZU0aP8/uO51oasmflJhDBzaRRZmLT8Pyjtt8qS22Sc839glm8gpKQcaG0mln66Gt9Fg==", "license": "MIT", "dependencies": { "@ant-design/colors": "^7.2.1", @@ -2714,7 +2731,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "devOptional": true, + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -2803,6 +2820,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -3270,7 +3288,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "devOptional": true, + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3408,6 +3426,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -3439,7 +3458,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3448,7 +3467,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3460,7 +3479,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.12.0" } @@ -3878,7 +3897,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "devOptional": true, + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3972,6 +3991,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, "license": "MIT", "optional": true }, @@ -4077,7 +4097,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8.6" }, @@ -4798,6 +4818,15 @@ "react": "^19.1.0" } }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -4855,6 +4884,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -4955,6 +4985,7 @@ "version": "1.89.2", "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "dev": true, "license": "MIT", "dependencies": { "chokidar": "^4.0.0", @@ -5025,6 +5056,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5173,7 +5205,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "dependencies": { "is-number": "^7.0.0" }, diff --git a/package.json b/package.json index bc6a947..c72cebb 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "clsx": "^2.1.1", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-icons": "^5.5.0", "react-router-dom": "^7.6.3", "sass": "^1.89.2", "tailwind-merge": "^3.3.1" @@ -35,6 +36,7 @@ "globals": "^16.2.0", "postcss": "^8.5.6", "prettier": "^3.6.2", + "sass": "^1.89.2", "tailwindcss": "^4.1.11", "typescript": "~5.8.3", "typescript-eslint": "^8.34.1", diff --git a/postcss.config.js b/postcss.config.js index 51a6e4e..6d43a53 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ export default { plugins: { - '@tailwindcss/postcss': {}, + '@tailwindcss/postcss': {}, // ← Используем новый пакет autoprefixer: {}, - }, -}; + } +} \ No newline at end of file diff --git a/src/entities/Ticket/index.ts b/src/entities/Ticket/index.ts new file mode 100644 index 0000000..3c42d29 --- /dev/null +++ b/src/entities/Ticket/index.ts @@ -0,0 +1,3 @@ +export { TicketCard } from './ui/TicketCard.tsx'; +export type { ITicket } from './model/types'; +export { mockTicket } from './model/constants'; \ No newline at end of file diff --git a/src/entities/Ticket/model/constants.ts b/src/entities/Ticket/model/constants.ts new file mode 100644 index 0000000..987613b --- /dev/null +++ b/src/entities/Ticket/model/constants.ts @@ -0,0 +1,33 @@ +import type { ITicket } from './types.ts'; + +export const mockTicket: ITicket = { + id: '1', + airline: 'Q Globus LLC', + flightNumber: 'GF-2025', + isDirect: true, + departure: { + time: '05:00', + city: 'Санкт-Петербург', + date: '30 июн, Пт', + airport: 'LED' + }, + arrival: { + time: '06:40', + city: 'Москва', + date: '30 июн, Пт', + airport: 'DME' + }, + duration: '1ч 40м', + tariffs: { + economy: { + basic: 3787, + standard: 5887, + plus: 12437 + } + }, + baggage: { + included: false, + price: 1500 + }, + seatsLeft: 2 +}; \ No newline at end of file diff --git a/src/entities/Ticket/model/types.ts b/src/entities/Ticket/model/types.ts new file mode 100644 index 0000000..c014b4f --- /dev/null +++ b/src/entities/Ticket/model/types.ts @@ -0,0 +1,31 @@ +export interface ITicket { + id: string; + airline: string; + flightNumber: string; + isDirect: boolean; + departure: { + time: string; + city: string; + date: string; + airport: string; + }; + arrival: { + time: string; + city: string; + date: string; + airport: string; + }; + duration: string; + tariffs: { + economy: { + basic: number; + standard: number; + plus: number; + }; + }; + baggage: { + included: boolean; + price?: number; + }; + seatsLeft: number; +} \ No newline at end of file diff --git a/src/entities/Ticket/ui/RouteInfo.tsx b/src/entities/Ticket/ui/RouteInfo.tsx new file mode 100644 index 0000000..a844380 --- /dev/null +++ b/src/entities/Ticket/ui/RouteInfo.tsx @@ -0,0 +1,53 @@ +import { AirplaneLandingIcon, AirplaneTakeoffIcon, LineIcon } from '@shared/ui/icons'; +import type { ITicket } from '../model/types.ts'; + +interface RouteInfoProps { + departure: ITicket['departure']; + arrival: ITicket['arrival']; + duration: ITicket['duration']; +} + +export const RouteInfo = ({ departure, arrival, duration }: RouteInfoProps) => ( +
+
+ + + в пути {duration} + + +
+
+
+ + {departure.time} + + {departure.airport} +
+ +
+ {arrival.airport} + + {arrival.time} + +
+
+
+
+ + {departure.city} + + + {departure.date} + +
+
+ + {arrival.city} + + + {arrival.date} + +
+
+
+); \ No newline at end of file diff --git a/src/entities/Ticket/ui/SeatsLeft.tsx b/src/entities/Ticket/ui/SeatsLeft.tsx new file mode 100644 index 0000000..95c0c06 --- /dev/null +++ b/src/entities/Ticket/ui/SeatsLeft.tsx @@ -0,0 +1,12 @@ +import { WarningCircleIcon } from '@shared/ui/icons'; + +interface SeatsLeftProps { + seatsLeft: number; +} + +export const SeatsLeft = ({ seatsLeft }: SeatsLeftProps) => ( +
+ + Осталось {seatsLeft} места +
+); diff --git a/src/entities/Ticket/ui/TariffsSection.tsx b/src/entities/Ticket/ui/TariffsSection.tsx new file mode 100644 index 0000000..4bc80b9 --- /dev/null +++ b/src/entities/Ticket/ui/TariffsSection.tsx @@ -0,0 +1,84 @@ +import { useState } from 'react'; +import { BackpackIcon, SuitcaseIcon, ArrowsClockwiseIcon, ArmchairIcon } from '@shared/ui/icons'; +import { SeatsLeft } from './SeatsLeft'; + +interface TariffsSectionProps { + tariffs: { + economy: { + basic: number; + standard: number; + plus: number; + }; + }; + seatsLeft: number; +} + +export const TariffsSection = ({ tariffs, seatsLeft }: TariffsSectionProps) => { + const [selectedTariff, setSelectedTariff] = useState(null); + + return ( +
+
setSelectedTariff('basic')} + > +
+ + Эконом Базовый + + + + + +
+ + {tariffs.economy.basic.toLocaleString('ru-RU')} ₽ + +
+ +
+
+
setSelectedTariff('standard')} + > +
+ + Эконом Стандарт + +
+ + + + +
+
+ + {tariffs.economy.standard.toLocaleString('ru-RU')} ₽ + +
+
setSelectedTariff('plus')} + > +
+ + Эконом Плюс + +
+ + + + +
+
+ + {tariffs.economy.plus.toLocaleString('ru-RU')} ₽ + +
+
+ ); +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TicketCard.tsx b/src/entities/Ticket/ui/TicketCard.tsx new file mode 100644 index 0000000..e0c6454 --- /dev/null +++ b/src/entities/Ticket/ui/TicketCard.tsx @@ -0,0 +1,28 @@ +import type { ITicket } from '../model/types.ts'; +import { TicketHeader } from './TicketHeader.tsx'; +import { RouteInfo } from './RouteInfo.tsx'; +import { TariffsSection } from './TariffsSection.tsx'; + +export const TicketCard = ({ ticket }: { ticket: ITicket }) => { + return ( +
+
+
+ + +
+
+ +
+
+
+ ); +}; + diff --git a/src/entities/Ticket/ui/TicketHeader.tsx b/src/entities/Ticket/ui/TicketHeader.tsx new file mode 100644 index 0000000..be0511f --- /dev/null +++ b/src/entities/Ticket/ui/TicketHeader.tsx @@ -0,0 +1,23 @@ +import { CaretDownIcon, LogoIcon } from '@shared/ui/icons'; + +interface TicketHeaderProps { + airline: string; + isDirect: boolean; +} + +export const TicketHeader = ({ airline, isDirect }: TicketHeaderProps) => ( +
+
+
+ +
+ {airline} +
+ {isDirect && ( +
+ Прямой рейс + +
+ )} +
+); \ No newline at end of file diff --git a/src/index.css b/src/index.css index e69de29..3d552a6 100644 --- a/src/index.css +++ b/src/index.css @@ -0,0 +1,2 @@ +@import "tailwindcss"; + diff --git a/src/main.tsx b/src/main.tsx index 06fb3d4..d910343 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,7 +2,7 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; -import App from '@app/App'; +import App from './app/App.tsx'; import './index.css'; createRoot(document.getElementById('root')!).render( diff --git a/src/pages/homePage/HomePage.tsx b/src/pages/homePage/HomePage.tsx index ee66948..32499c5 100644 --- a/src/pages/homePage/HomePage.tsx +++ b/src/pages/homePage/HomePage.tsx @@ -1,3 +1,10 @@ +import { TicketCard } from '../../entities/Ticket'; +import { mockTicket } from '../../entities/Ticket'; + export const HomePage = () => { - return
HomePage
; -}; + return ( +
+ +
+ ); +}; \ No newline at end of file diff --git a/src/pages/index.ts b/src/pages/index.ts index 473c0ae..45b3388 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -1,4 +1,4 @@ export { HomePage } from './homePage'; export { SignIn } from './signIn'; export { SignUp } from './signUp'; -export { NotFoundPage } from './notFoundPage'; +export { NotFoundPage } from './notFoundPage'; \ No newline at end of file diff --git a/src/shared/ui/icons/AirplaneLanding.tsx b/src/shared/ui/icons/AirplaneLanding.tsx new file mode 100644 index 0000000..5ea44c6 --- /dev/null +++ b/src/shared/ui/icons/AirplaneLanding.tsx @@ -0,0 +1,24 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const AirplaneLandingIcon = ({ size = 20, className = '' }: IconProps) => ( + + + + +); diff --git a/src/shared/ui/icons/AirplaneTakeoff.tsx b/src/shared/ui/icons/AirplaneTakeoff.tsx new file mode 100644 index 0000000..f38825d --- /dev/null +++ b/src/shared/ui/icons/AirplaneTakeoff.tsx @@ -0,0 +1,23 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const AirplaneTakeoffIcon = ({ size = 20, className = '' }: IconProps) => ( + + + + +); diff --git a/src/shared/ui/icons/Armchair.tsx b/src/shared/ui/icons/Armchair.tsx new file mode 100644 index 0000000..33303e9 --- /dev/null +++ b/src/shared/ui/icons/Armchair.tsx @@ -0,0 +1,28 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const ArmchairIcon = ({ size = 20, className = '' }: IconProps) => ( + + + + + +); diff --git a/src/shared/ui/icons/ArrowsClockwise.tsx b/src/shared/ui/icons/ArrowsClockwise.tsx new file mode 100644 index 0000000..6eb0720 --- /dev/null +++ b/src/shared/ui/icons/ArrowsClockwise.tsx @@ -0,0 +1,33 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const ArrowsClockwiseIcon = ({ size = 18, className = '' }: IconProps) => ( + + + + + + +); + diff --git a/src/shared/ui/icons/Backpack.tsx b/src/shared/ui/icons/Backpack.tsx new file mode 100644 index 0000000..f0b019b --- /dev/null +++ b/src/shared/ui/icons/Backpack.tsx @@ -0,0 +1,42 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const BackpackIcon = ({ size = 20, className = '' }: IconProps) => ( + + + + + + + + +); \ No newline at end of file diff --git a/src/shared/ui/icons/CarretDown.tsx b/src/shared/ui/icons/CarretDown.tsx new file mode 100644 index 0000000..2e4530f --- /dev/null +++ b/src/shared/ui/icons/CarretDown.tsx @@ -0,0 +1,20 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const CaretDownIcon = ({ size = 12, className = '' }: IconProps) => ( + + + +); diff --git a/src/shared/ui/icons/Line.tsx b/src/shared/ui/icons/Line.tsx new file mode 100644 index 0000000..d0b1a3c --- /dev/null +++ b/src/shared/ui/icons/Line.tsx @@ -0,0 +1,21 @@ +interface IconProps { + className?: string; + width?: number; + height?: number; +} + +export const LineIcon = ({ className = '', width = 165, height = 2 }: IconProps) => ( + + + +); diff --git a/src/shared/ui/icons/LogoIcon.tsx b/src/shared/ui/icons/LogoIcon.tsx new file mode 100644 index 0000000..2570676 --- /dev/null +++ b/src/shared/ui/icons/LogoIcon.tsx @@ -0,0 +1,44 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const LogoIcon = ({ size = 40, className = '' }: IconProps) => ( + + + + + + + + + + + + + + + + +); diff --git a/src/shared/ui/icons/Suitcase.tsx b/src/shared/ui/icons/Suitcase.tsx new file mode 100644 index 0000000..04aa87e --- /dev/null +++ b/src/shared/ui/icons/Suitcase.tsx @@ -0,0 +1,26 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const SuitcaseIcon = ({ size = 18, className = '' }: IconProps) => ( + + + + +); diff --git a/src/shared/ui/icons/WarningCircle.tsx b/src/shared/ui/icons/WarningCircle.tsx new file mode 100644 index 0000000..8cd1cce --- /dev/null +++ b/src/shared/ui/icons/WarningCircle.tsx @@ -0,0 +1,30 @@ +interface IconProps { + size?: number; + className?: string; +} + +export const WarningCircleIcon = ({ size = 18, className = '' }: IconProps) => ( + + + + + +); diff --git a/src/shared/ui/icons/index.ts b/src/shared/ui/icons/index.ts new file mode 100644 index 0000000..6c2d7a2 --- /dev/null +++ b/src/shared/ui/icons/index.ts @@ -0,0 +1,10 @@ +export { AirplaneLandingIcon } from './AirplaneLanding.tsx'; +export { AirplaneTakeoffIcon } from './AirplaneTakeoff.tsx'; +export { CaretDownIcon } from './CarretDown.tsx'; +export { LogoIcon } from './LogoIcon.tsx'; +export { LineIcon } from './Line.tsx'; +export { BackpackIcon } from './Backpack.tsx'; +export { SuitcaseIcon } from './Suitcase.tsx'; +export { ArrowsClockwiseIcon } from './ArrowsClockwise.tsx'; +export { ArmchairIcon } from './Armchair.tsx'; +export { WarningCircleIcon } from './WarningCircle.tsx'; \ No newline at end of file diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/tailwind.config.js b/tailwind.config.js index 3396df6..e745fee 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,8 +1,15 @@ -/** @type {import('tailwindcss').Config} */ +import defaultTheme from 'tailwindcss/defaultTheme' + export default { - content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], theme: { extend: { + fontFamily: { + roboto: ['Roboto', ...defaultTheme.fontFamily.sans], + }, colors: { ring: 'hsl(var(--ring))', background: 'hsl(var(--background))', diff --git a/vite.config.ts b/vite.config.ts index 8ef4dee..6542089 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; -import path from 'path'; +import path from 'path'; export default defineConfig({ plugins: [react()], @@ -14,4 +14,4 @@ export default defineConfig({ '@pages': path.resolve(__dirname, 'src/pages'), }, }, -}); +}); \ No newline at end of file From 0f64a86f058c04874ebe8070e912a417d0178c2f Mon Sep 17 00:00:00 2001 From: dianakuprava Date: Sat, 19 Jul 2025 06:32:47 +0300 Subject: [PATCH 2/6] Update postcss.config.js --- postcss.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/postcss.config.js b/postcss.config.js index 6d43a53..a8bbdec 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ export default { plugins: { - '@tailwindcss/postcss': {}, // ← Используем новый пакет + '@tailwindcss/postcss': {}, autoprefixer: {}, } -} \ No newline at end of file +} From ac82214aa6366625e651aa1a84cb7174ab4fa662 Mon Sep 17 00:00:00 2001 From: dianakuprava Date: Sat, 19 Jul 2025 07:04:23 +0300 Subject: [PATCH 3/6] Update postcss.config.js --- postcss.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postcss.config.js b/postcss.config.js index a8bbdec..8ffca26 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ export default { plugins: { - '@tailwindcss/postcss': {}, + '@tailwindcss/postcss': {}, autoprefixer: {}, } } From 5d25a2f9e85d395505c430f491370a7ffa7afb8f Mon Sep 17 00:00:00 2001 From: dianakuprava Date: Sat, 19 Jul 2025 19:14:15 +0300 Subject: [PATCH 4/6] =?UTF-8?q?WIP:=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 180 +++++++++++----------------------------------- package.json | 3 +- postcss.config.js | 6 +- src/main.tsx | 1 - 4 files changed, 45 insertions(+), 145 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee4adda..b88de6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,8 @@ "name": "project", "version": "0.0.0", "dependencies": { + "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/vite": "^4.1.11", "antd": "^5.26.4", "clsx": "^2.1.1", "react": "^19.1.0", @@ -19,7 +21,6 @@ }, "devDependencies": { "@eslint/js": "^9.29.0", - "@tailwindcss/postcss": "^4.1.11", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/node": "^24.0.10", "@types/react": "^19.1.8", @@ -43,7 +44,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -56,7 +56,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -453,7 +452,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "aix" @@ -469,7 +467,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -485,7 +482,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -501,7 +497,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -517,7 +512,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -533,7 +527,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -549,7 +542,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -565,7 +557,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -581,7 +572,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -597,7 +587,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -613,7 +602,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -629,7 +617,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -645,7 +632,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -661,7 +647,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -677,7 +662,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -693,7 +677,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -709,7 +692,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -725,7 +707,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -741,7 +722,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -757,7 +737,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -773,7 +752,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -789,7 +767,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -805,7 +782,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -821,7 +797,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -837,7 +812,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1066,7 +1040,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -1079,7 +1052,6 @@ "version": "0.3.12", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -1089,7 +1061,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1097,14 +1068,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", - "dev": true + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.29", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1149,7 +1118,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1189,7 +1157,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1210,7 +1177,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1231,7 +1197,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1252,7 +1217,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1273,7 +1237,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1294,7 +1257,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1315,7 +1277,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1336,7 +1297,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1357,7 +1317,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1378,7 +1337,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1399,7 +1357,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1420,7 +1377,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1441,7 +1397,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1459,7 +1414,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, "license": "Apache-2.0", "optional": true, "bin": { @@ -1631,7 +1585,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -1644,7 +1597,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -1657,7 +1609,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -1670,7 +1621,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -1683,7 +1633,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -1696,7 +1645,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -1709,7 +1657,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1722,7 +1669,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1735,7 +1681,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1748,7 +1693,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1761,7 +1705,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1774,7 +1717,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1787,7 +1729,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1800,7 +1741,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1813,7 +1753,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1826,7 +1765,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1839,7 +1777,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1852,7 +1789,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1865,7 +1801,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1878,7 +1813,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1888,7 +1822,6 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -1904,7 +1837,6 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1936,7 +1868,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1953,7 +1884,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1970,7 +1900,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1987,7 +1916,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2004,7 +1932,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2021,7 +1948,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2038,7 +1964,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2055,7 +1980,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2072,7 +1996,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2097,7 +2020,6 @@ "cpu": [ "wasm32" ], - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -2119,7 +2041,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2136,7 +2057,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2150,7 +2070,6 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.11.tgz", "integrity": "sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==", - "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -2160,6 +2079,20 @@ "tailwindcss": "4.1.11" } }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz", + "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.11", + "@tailwindcss/oxide": "4.1.11", + "tailwindcss": "4.1.11" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, "node_modules/@trivago/prettier-plugin-sort-imports": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz", @@ -2239,8 +2172,7 @@ "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -2252,7 +2184,7 @@ "version": "24.0.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz", "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==", - "dev": true, + "devOptional": true, "dependencies": { "undici-types": "~7.8.0" } @@ -2693,6 +2625,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", @@ -2731,7 +2664,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "devOptional": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -2820,7 +2753,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -2836,7 +2769,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -2962,7 +2894,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -2978,7 +2909,6 @@ "version": "5.18.2", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -2992,7 +2922,6 @@ "version": "0.25.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -3288,7 +3217,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "devOptional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3336,6 +3265,7 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -3348,7 +3278,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -3395,7 +3324,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -3426,7 +3354,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -3458,7 +3386,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -3467,7 +3395,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3479,7 +3407,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.12.0" } @@ -3501,7 +3429,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -3602,7 +3529,6 @@ "version": "1.30.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", - "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -3634,7 +3560,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3655,7 +3580,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3676,7 +3600,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3697,7 +3620,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3718,7 +3640,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3739,7 +3660,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3760,7 +3680,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3781,7 +3700,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3802,7 +3720,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3823,7 +3740,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -3878,7 +3794,6 @@ "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -3897,7 +3812,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "devOptional": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3922,7 +3837,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -3932,7 +3846,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -3945,7 +3858,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" @@ -3967,7 +3879,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -3991,7 +3902,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, "license": "MIT", "optional": true }, @@ -4006,6 +3916,7 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4090,14 +4001,13 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8.6" }, @@ -4109,7 +4019,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4124,6 +4033,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4137,7 +4047,8 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -4884,7 +4795,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -4923,7 +4834,6 @@ "version": "4.44.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", - "dev": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -4985,7 +4895,7 @@ "version": "1.89.2", "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "chokidar": "^4.0.0", @@ -5056,7 +4966,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5110,13 +5019,12 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", - "dev": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5126,7 +5034,6 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -5144,7 +5051,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -5163,7 +5069,6 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" @@ -5179,7 +5084,6 @@ "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -5193,7 +5097,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, "engines": { "node": ">=12" }, @@ -5205,7 +5108,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5282,7 +5185,7 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", - "dev": true + "devOptional": true }, "node_modules/update-browserslist-db": { "version": "1.1.3", @@ -5327,7 +5230,6 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.2.tgz", "integrity": "sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==", - "dev": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", @@ -5401,7 +5303,6 @@ "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -5415,7 +5316,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, "engines": { "node": ">=12" }, diff --git a/package.json b/package.json index c72cebb..dee19bb 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "format:check": "prettier --check ." }, "dependencies": { + "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/vite": "^4.1.11", "antd": "^5.26.4", "clsx": "^2.1.1", "react": "^19.1.0", @@ -23,7 +25,6 @@ }, "devDependencies": { "@eslint/js": "^9.29.0", - "@tailwindcss/postcss": "^4.1.11", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/node": "^24.0.10", "@types/react": "^19.1.8", diff --git a/postcss.config.js b/postcss.config.js index 6d43a53..51a6e4e 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ export default { plugins: { - '@tailwindcss/postcss': {}, // ← Используем новый пакет + '@tailwindcss/postcss': {}, autoprefixer: {}, - } -} \ No newline at end of file + }, +}; diff --git a/src/main.tsx b/src/main.tsx index d910343..3e70b4c 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,7 +1,6 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; - import App from './app/App.tsx'; import './index.css'; From 055d4935a69a408a869724e1061e56e1cd399289 Mon Sep 17 00:00:00 2001 From: dianakuprava Date: Tue, 22 Jul 2025 14:24:34 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B1=D0=B8=D0=BB=D0=B5=D1=82?= =?UTF-8?q?=D0=B0:=20=D1=82=D0=B8=D0=BF=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F,=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20TariffsSection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/Ticket/index.ts | 11 ++- src/entities/Ticket/model/index.ts | 2 + src/entities/Ticket/ui/RouteInfo.tsx | 53 ------------ .../Ticket/ui/RouteInfo/RouteInfo.tsx | 55 ++++++++++++ src/entities/Ticket/ui/RouteInfo/index.ts | 2 + src/entities/Ticket/ui/SeatsLeft.tsx | 12 --- .../Ticket/ui/SeatsLeft/SeatsLeft.tsx | 27 ++++++ src/entities/Ticket/ui/SeatsLeft/index.ts | 2 + .../Ticket/ui/TariffCard/TariffCard.tsx | 56 +++++++++++++ src/entities/Ticket/ui/TariffCard/index.ts | 2 + src/entities/Ticket/ui/TariffsSection.tsx | 84 ------------------- .../ui/TariffsSection/TariffsSection.tsx | 73 ++++++++++++++++ .../Ticket/ui/TariffsSection/index.ts | 2 + .../Ticket/ui/{ => TicketCard}/TicketCard.tsx | 18 ++-- src/entities/Ticket/ui/TicketCard/index.ts | 2 + src/entities/Ticket/ui/TicketHeader.tsx | 23 ----- .../Ticket/ui/TicketHeader/TicketHeader.tsx | 25 ++++++ src/entities/Ticket/ui/TicketHeader/index.ts | 2 + src/entities/Ticket/ui/index.ts | 5 ++ 19 files changed, 274 insertions(+), 182 deletions(-) create mode 100644 src/entities/Ticket/model/index.ts delete mode 100644 src/entities/Ticket/ui/RouteInfo.tsx create mode 100644 src/entities/Ticket/ui/RouteInfo/RouteInfo.tsx create mode 100644 src/entities/Ticket/ui/RouteInfo/index.ts delete mode 100644 src/entities/Ticket/ui/SeatsLeft.tsx create mode 100644 src/entities/Ticket/ui/SeatsLeft/SeatsLeft.tsx create mode 100644 src/entities/Ticket/ui/SeatsLeft/index.ts create mode 100644 src/entities/Ticket/ui/TariffCard/TariffCard.tsx create mode 100644 src/entities/Ticket/ui/TariffCard/index.ts delete mode 100644 src/entities/Ticket/ui/TariffsSection.tsx create mode 100644 src/entities/Ticket/ui/TariffsSection/TariffsSection.tsx create mode 100644 src/entities/Ticket/ui/TariffsSection/index.ts rename src/entities/Ticket/ui/{ => TicketCard}/TicketCard.tsx (64%) create mode 100644 src/entities/Ticket/ui/TicketCard/index.ts delete mode 100644 src/entities/Ticket/ui/TicketHeader.tsx create mode 100644 src/entities/Ticket/ui/TicketHeader/TicketHeader.tsx create mode 100644 src/entities/Ticket/ui/TicketHeader/index.ts create mode 100644 src/entities/Ticket/ui/index.ts diff --git a/src/entities/Ticket/index.ts b/src/entities/Ticket/index.ts index 3c42d29..85aa514 100644 --- a/src/entities/Ticket/index.ts +++ b/src/entities/Ticket/index.ts @@ -1,3 +1,8 @@ -export { TicketCard } from './ui/TicketCard.tsx'; -export type { ITicket } from './model/types'; -export { mockTicket } from './model/constants'; \ No newline at end of file +export { TicketCard } from './ui/TicketCard'; +export { TariffsSection } from './ui/TariffsSection'; +export { RouteInfo } from './ui/RouteInfo'; +export { SeatsLeft } from './ui/SeatsLeft'; +export { TicketHeader } from './ui/TicketHeader'; + +export type { ITicket } from './model'; +export { mockTicket } from './model'; \ No newline at end of file diff --git a/src/entities/Ticket/model/index.ts b/src/entities/Ticket/model/index.ts new file mode 100644 index 0000000..0496721 --- /dev/null +++ b/src/entities/Ticket/model/index.ts @@ -0,0 +1,2 @@ +export type { ITicket } from './types'; +export { mockTicket } from './constants'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/RouteInfo.tsx b/src/entities/Ticket/ui/RouteInfo.tsx deleted file mode 100644 index a844380..0000000 --- a/src/entities/Ticket/ui/RouteInfo.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { AirplaneLandingIcon, AirplaneTakeoffIcon, LineIcon } from '@shared/ui/icons'; -import type { ITicket } from '../model/types.ts'; - -interface RouteInfoProps { - departure: ITicket['departure']; - arrival: ITicket['arrival']; - duration: ITicket['duration']; -} - -export const RouteInfo = ({ departure, arrival, duration }: RouteInfoProps) => ( -
-
- - - в пути {duration} - - -
-
-
- - {departure.time} - - {departure.airport} -
- -
- {arrival.airport} - - {arrival.time} - -
-
-
-
- - {departure.city} - - - {departure.date} - -
-
- - {arrival.city} - - - {arrival.date} - -
-
-
-); \ No newline at end of file diff --git a/src/entities/Ticket/ui/RouteInfo/RouteInfo.tsx b/src/entities/Ticket/ui/RouteInfo/RouteInfo.tsx new file mode 100644 index 0000000..31ae63e --- /dev/null +++ b/src/entities/Ticket/ui/RouteInfo/RouteInfo.tsx @@ -0,0 +1,55 @@ +import { AirplaneLandingIcon, AirplaneTakeoffIcon, LineIcon } from '@shared/ui/icons'; +import type { ITicket } from '@entities/Ticket'; + +export interface RouteInfoProps { + departure: ITicket['departure']; + arrival: ITicket['arrival']; + duration: ITicket['duration']; +} + +export const RouteInfo = ({ departure, arrival, duration }: RouteInfoProps) => { + return ( +
+
+ + + в пути {duration} + + +
+
+
+ + {departure.time} + + {departure.airport} +
+ +
+ {arrival.airport} + + {arrival.time} + +
+
+
+
+ + {departure.city} + + + {departure.date} + +
+
+ + {arrival.city} + + + {arrival.date} + +
+
+
+ ); +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/RouteInfo/index.ts b/src/entities/Ticket/ui/RouteInfo/index.ts new file mode 100644 index 0000000..6b0e8b4 --- /dev/null +++ b/src/entities/Ticket/ui/RouteInfo/index.ts @@ -0,0 +1,2 @@ +export { RouteInfo } from './RouteInfo'; +export type { RouteInfoProps } from './RouteInfo'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/SeatsLeft.tsx b/src/entities/Ticket/ui/SeatsLeft.tsx deleted file mode 100644 index 95c0c06..0000000 --- a/src/entities/Ticket/ui/SeatsLeft.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { WarningCircleIcon } from '@shared/ui/icons'; - -interface SeatsLeftProps { - seatsLeft: number; -} - -export const SeatsLeft = ({ seatsLeft }: SeatsLeftProps) => ( -
- - Осталось {seatsLeft} места -
-); diff --git a/src/entities/Ticket/ui/SeatsLeft/SeatsLeft.tsx b/src/entities/Ticket/ui/SeatsLeft/SeatsLeft.tsx new file mode 100644 index 0000000..46742f7 --- /dev/null +++ b/src/entities/Ticket/ui/SeatsLeft/SeatsLeft.tsx @@ -0,0 +1,27 @@ +import { WarningCircleIcon } from '@shared/ui/icons'; + +export interface SeatsLeftProps { + seatsLeft: number; +} + +export const SeatsLeft = ({ seatsLeft }: SeatsLeftProps) => { + const getSeatsText = (count: number) => { + const lastDigit = count % 10; + const lastTwoDigits = count % 100; + + if (lastDigit === 1 && lastTwoDigits !== 11) { + return 'место'; + } + if (lastDigit >= 2 && lastDigit <= 4 && !(lastTwoDigits >= 12 && lastTwoDigits <= 14)) { + return 'места'; + } + return 'мест'; + }; + + return ( +
+ + Осталось {seatsLeft} {getSeatsText(seatsLeft)} +
+ ); +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/SeatsLeft/index.ts b/src/entities/Ticket/ui/SeatsLeft/index.ts new file mode 100644 index 0000000..3a10668 --- /dev/null +++ b/src/entities/Ticket/ui/SeatsLeft/index.ts @@ -0,0 +1,2 @@ +export { SeatsLeft } from './SeatsLeft'; +export type { SeatsLeftProps } from './SeatsLeft'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TariffCard/TariffCard.tsx b/src/entities/Ticket/ui/TariffCard/TariffCard.tsx new file mode 100644 index 0000000..3d9b02e --- /dev/null +++ b/src/entities/Ticket/ui/TariffCard/TariffCard.tsx @@ -0,0 +1,56 @@ +import type { ReactNode } from 'react'; +import { SeatsLeft } from '@entities/Ticket'; + +export interface TariffCardProps { + title: string; + price: number; + isSelected: boolean; + onClick: () => void; + icons: ReactNode; + showSeatsLeft?: boolean; + seatsLeft?: number; + bgColor?: string; + dimensions?: string; +} + +export const TariffCard = ({ + title, + price, + isSelected, + onClick, + icons, + showSeatsLeft = false, + seatsLeft = 0, + bgColor = 'bg-[#EBF3FF]', + dimensions = '' + }: TariffCardProps) => { + const shadowClass = 'shadow-[0_4px_4px_rgba(0,0,0,0.25)]'; + + return ( +
+
+ + {title} + +
+ {icons} +
+
+ + + {new Intl.NumberFormat('ru-RU').format(price)} ₽ + + + {showSeatsLeft && ( +
+ +
+ )} +
+ ); +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TariffCard/index.ts b/src/entities/Ticket/ui/TariffCard/index.ts new file mode 100644 index 0000000..6dd0230 --- /dev/null +++ b/src/entities/Ticket/ui/TariffCard/index.ts @@ -0,0 +1,2 @@ +export { TariffCard } from './TariffCard'; +export type { TariffCardProps } from './TariffCard'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TariffsSection.tsx b/src/entities/Ticket/ui/TariffsSection.tsx deleted file mode 100644 index 4bc80b9..0000000 --- a/src/entities/Ticket/ui/TariffsSection.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { useState } from 'react'; -import { BackpackIcon, SuitcaseIcon, ArrowsClockwiseIcon, ArmchairIcon } from '@shared/ui/icons'; -import { SeatsLeft } from './SeatsLeft'; - -interface TariffsSectionProps { - tariffs: { - economy: { - basic: number; - standard: number; - plus: number; - }; - }; - seatsLeft: number; -} - -export const TariffsSection = ({ tariffs, seatsLeft }: TariffsSectionProps) => { - const [selectedTariff, setSelectedTariff] = useState(null); - - return ( -
-
setSelectedTariff('basic')} - > -
- - Эконом Базовый - - - - - -
- - {tariffs.economy.basic.toLocaleString('ru-RU')} ₽ - -
- -
-
-
setSelectedTariff('standard')} - > -
- - Эконом Стандарт - -
- - - - -
-
- - {tariffs.economy.standard.toLocaleString('ru-RU')} ₽ - -
-
setSelectedTariff('plus')} - > -
- - Эконом Плюс - -
- - - - -
-
- - {tariffs.economy.plus.toLocaleString('ru-RU')} ₽ - -
-
- ); -}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TariffsSection/TariffsSection.tsx b/src/entities/Ticket/ui/TariffsSection/TariffsSection.tsx new file mode 100644 index 0000000..14efe9e --- /dev/null +++ b/src/entities/Ticket/ui/TariffsSection/TariffsSection.tsx @@ -0,0 +1,73 @@ +import { useState } from 'react'; +import { BackpackIcon, SuitcaseIcon, ArrowsClockwiseIcon, ArmchairIcon } from '@shared/ui/icons'; +import { TariffCard } from '@entities/Ticket/ui/TariffCard'; +import type { ITicket } from '@entities/Ticket'; + +export interface TariffsSectionProps { + tariffs: ITicket['tariffs']; + seatsLeft: number; +} + +export const TariffsSection = ({ tariffs, seatsLeft }: TariffsSectionProps) => { + const [selectedTariff, setSelectedTariff] = useState(null); + + const tariffConfigs = [ + { + type: 'basic', + title: 'Эконом Базовый', + price: tariffs.economy.basic, + bgColor: 'bg-[#EBF3FF]', + icons: [ + , + , + , + + ], + showSeatsLeft: true + }, + { + type: 'standard', + title: 'Эконом Стандарт', + price: tariffs.economy.standard, + bgColor: 'bg-[#EBF3FF]', + icons: [ + , + , + , + + ] + }, + { + type: 'plus', + title: 'Эконом Плюс', + price: tariffs.economy.plus, + bgColor: 'bg-[#C2DCFF]', + icons: [ + , + , + , + + ], + dimensions: 'w-[260px] h-[165px]' + } + ]; + + return ( +
+ {tariffConfigs.map((config) => ( + setSelectedTariff(config.type)} + icons={<>{config.icons}} + showSeatsLeft={config.showSeatsLeft} + seatsLeft={seatsLeft} + bgColor={config.bgColor} + dimensions={config.dimensions} + /> + ))} +
+ ); +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TariffsSection/index.ts b/src/entities/Ticket/ui/TariffsSection/index.ts new file mode 100644 index 0000000..81bde91 --- /dev/null +++ b/src/entities/Ticket/ui/TariffsSection/index.ts @@ -0,0 +1,2 @@ +export { TariffsSection } from './TariffsSection'; +export type { TariffsSectionProps } from './TariffsSection'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TicketCard.tsx b/src/entities/Ticket/ui/TicketCard/TicketCard.tsx similarity index 64% rename from src/entities/Ticket/ui/TicketCard.tsx rename to src/entities/Ticket/ui/TicketCard/TicketCard.tsx index e0c6454..86892a3 100644 --- a/src/entities/Ticket/ui/TicketCard.tsx +++ b/src/entities/Ticket/ui/TicketCard/TicketCard.tsx @@ -1,9 +1,14 @@ -import type { ITicket } from '../model/types.ts'; -import { TicketHeader } from './TicketHeader.tsx'; -import { RouteInfo } from './RouteInfo.tsx'; -import { TariffsSection } from './TariffsSection.tsx'; +import type { ITicket } from '@entities/Ticket'; +import { TicketHeader } from '@entities/Ticket'; +import { RouteInfo } from '@entities/Ticket'; +import { TariffsSection } from '@entities/Ticket'; -export const TicketCard = ({ ticket }: { ticket: ITicket }) => { +// Явно объявляем интерфейс пропсов +export interface TicketCardProps { + ticket: ITicket; +} + +export const TicketCard = ({ ticket }: TicketCardProps) => { return (
@@ -24,5 +29,4 @@ export const TicketCard = ({ ticket }: { ticket: ITicket }) => {
); -}; - +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TicketCard/index.ts b/src/entities/Ticket/ui/TicketCard/index.ts new file mode 100644 index 0000000..5cfd067 --- /dev/null +++ b/src/entities/Ticket/ui/TicketCard/index.ts @@ -0,0 +1,2 @@ +export { TicketCard } from './TicketCard'; +export type { TicketCardProps } from './TicketCard'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TicketHeader.tsx b/src/entities/Ticket/ui/TicketHeader.tsx deleted file mode 100644 index be0511f..0000000 --- a/src/entities/Ticket/ui/TicketHeader.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { CaretDownIcon, LogoIcon } from '@shared/ui/icons'; - -interface TicketHeaderProps { - airline: string; - isDirect: boolean; -} - -export const TicketHeader = ({ airline, isDirect }: TicketHeaderProps) => ( -
-
-
- -
- {airline} -
- {isDirect && ( -
- Прямой рейс - -
- )} -
-); \ No newline at end of file diff --git a/src/entities/Ticket/ui/TicketHeader/TicketHeader.tsx b/src/entities/Ticket/ui/TicketHeader/TicketHeader.tsx new file mode 100644 index 0000000..d4ca594 --- /dev/null +++ b/src/entities/Ticket/ui/TicketHeader/TicketHeader.tsx @@ -0,0 +1,25 @@ +import { CaretDownIcon, LogoIcon } from '@shared/ui/icons'; + +export interface TicketHeaderProps { + airline: string; + isDirect: boolean; +} + +export const TicketHeader = ({ airline, isDirect }: TicketHeaderProps) => { + return ( +
+
+
+ +
+ {airline} +
+ {isDirect && ( +
+ Прямой рейс + +
+ )} +
+ ); +}; \ No newline at end of file diff --git a/src/entities/Ticket/ui/TicketHeader/index.ts b/src/entities/Ticket/ui/TicketHeader/index.ts new file mode 100644 index 0000000..feff5f0 --- /dev/null +++ b/src/entities/Ticket/ui/TicketHeader/index.ts @@ -0,0 +1,2 @@ +export { TicketHeader } from './TicketHeader'; +export type { TicketHeaderProps } from './TicketHeader'; \ No newline at end of file diff --git a/src/entities/Ticket/ui/index.ts b/src/entities/Ticket/ui/index.ts new file mode 100644 index 0000000..083a387 --- /dev/null +++ b/src/entities/Ticket/ui/index.ts @@ -0,0 +1,5 @@ +export { TicketCard } from './TicketCard'; +export { TariffsSection } from './TariffsSection'; +export { RouteInfo } from './RouteInfo'; +export { SeatsLeft } from './SeatsLeft'; +export { TicketHeader } from './TicketHeader'; \ No newline at end of file From 0c17e907c8141397dcf452b03c47eaefa908e708 Mon Sep 17 00:00:00 2001 From: dianakuprava Date: Tue, 22 Jul 2025 15:01:05 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3:=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B5=D0=B2,=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- postcss.config.js | 2 +- .../Ticket/ui/TariffCard/TariffCard.tsx | 20 +++++++++---------- .../Ticket/ui/TicketCard/TicketCard.tsx | 1 - 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/postcss.config.js b/postcss.config.js index 6d43a53..8416a01 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ export default { plugins: { - '@tailwindcss/postcss': {}, // ← Используем новый пакет + '@tailwindcss/postcss': {}, autoprefixer: {}, } } \ No newline at end of file diff --git a/src/entities/Ticket/ui/TariffCard/TariffCard.tsx b/src/entities/Ticket/ui/TariffCard/TariffCard.tsx index 3d9b02e..cd13d57 100644 --- a/src/entities/Ticket/ui/TariffCard/TariffCard.tsx +++ b/src/entities/Ticket/ui/TariffCard/TariffCard.tsx @@ -14,16 +14,16 @@ export interface TariffCardProps { } export const TariffCard = ({ - title, - price, - isSelected, - onClick, - icons, - showSeatsLeft = false, - seatsLeft = 0, - bgColor = 'bg-[#EBF3FF]', - dimensions = '' - }: TariffCardProps) => { + title, + price, + isSelected, + onClick, + icons, + showSeatsLeft = false, + seatsLeft = 0, + bgColor = 'bg-[#EBF3FF]', + dimensions = '' +}: TariffCardProps) => { const shadowClass = 'shadow-[0_4px_4px_rgba(0,0,0,0.25)]'; return ( diff --git a/src/entities/Ticket/ui/TicketCard/TicketCard.tsx b/src/entities/Ticket/ui/TicketCard/TicketCard.tsx index 86892a3..cabdbeb 100644 --- a/src/entities/Ticket/ui/TicketCard/TicketCard.tsx +++ b/src/entities/Ticket/ui/TicketCard/TicketCard.tsx @@ -3,7 +3,6 @@ import { TicketHeader } from '@entities/Ticket'; import { RouteInfo } from '@entities/Ticket'; import { TariffsSection } from '@entities/Ticket'; -// Явно объявляем интерфейс пропсов export interface TicketCardProps { ticket: ITicket; }