From 6bdeea2241d7d2ef61daf2420d651ff3c6363085 Mon Sep 17 00:00:00 2001 From: Nikita Khromov Date: Wed, 27 May 2026 15:57:28 +0300 Subject: [PATCH] Added new design system --- web-v2/package.json | 5 +- web-v2/pnpm-lock.yaml | 11 + web-v2/scripts/add-icon.ts | 13 +- web-v2/src/App.tsx | 5 + web-v2/src/components/AppLayout.tsx | 33 +- .../icons/{coins-icon.tsx => CoinsIcon.tsx} | 0 web-v2/src/components/ui/UiButton.tsx | 28 + web-v2/src/components/ui/UiCard.tsx | 11 + web-v2/src/components/ui/UiInput.tsx | 50 ++ web-v2/src/components/ui/UiModal.tsx | 50 ++ web-v2/src/components/ui/UiSelect.tsx | 115 +++ web-v2/src/components/ui/UiSpinner.tsx | 7 + web-v2/src/components/ui/UiTable.tsx | 14 + web-v2/src/components/ui/index.ts | 7 + web-v2/src/constants/routes.ts | 1 + web-v2/src/main.tsx | 1 + web-v2/src/pages/DesignSystem/index.tsx | 670 ++++++++++++++++++ web-v2/src/styles/components.css | 62 ++ web-v2/src/styles/index.css | 13 +- web-v2/src/styles/theme.css | 70 ++ web-v2/src/styles/tokens.css | 86 +++ web-v2/src/vite-env.d.ts | 2 + web-v2/tailwind.config.js | 16 - 23 files changed, 1223 insertions(+), 47 deletions(-) rename web-v2/src/components/icons/{coins-icon.tsx => CoinsIcon.tsx} (100%) create mode 100644 web-v2/src/components/ui/UiButton.tsx create mode 100644 web-v2/src/components/ui/UiCard.tsx create mode 100644 web-v2/src/components/ui/UiInput.tsx create mode 100644 web-v2/src/components/ui/UiModal.tsx create mode 100644 web-v2/src/components/ui/UiSelect.tsx create mode 100644 web-v2/src/components/ui/UiSpinner.tsx create mode 100644 web-v2/src/components/ui/UiTable.tsx create mode 100644 web-v2/src/components/ui/index.ts create mode 100644 web-v2/src/pages/DesignSystem/index.tsx create mode 100644 web-v2/src/styles/components.css create mode 100644 web-v2/src/styles/theme.css create mode 100644 web-v2/src/styles/tokens.css delete mode 100644 web-v2/tailwind.config.js diff --git a/web-v2/package.json b/web-v2/package.json index b036a6c..69fcd7b 100644 --- a/web-v2/package.json +++ b/web-v2/package.json @@ -16,10 +16,11 @@ "add-icon": "tsx ./scripts/add-icon.ts" }, "dependencies": { - "lwk_web": "file:../lwk_wasm/pkg_web", + "@fontsource-variable/inter": "^5.2.8", "@heroui/react": "^3.0.4", "@tanstack/react-query": "^5.100.10", "axios": "^1.7.0", + "lwk_web": "file:../lwk_wasm/pkg_web", "react": "^19.2.6", "react-dom": "^19.2.6", "react-router-dom": "^7.15.0", @@ -27,8 +28,8 @@ }, "devDependencies": { "@eslint/js": "^9.39.4", - "@tanstack/react-query-devtools": "^5.100.10", "@tailwindcss/postcss": "^4.2.0", + "@tanstack/react-query-devtools": "^5.100.10", "@types/node": "^24.12.4", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", diff --git a/web-v2/pnpm-lock.yaml b/web-v2/pnpm-lock.yaml index f87f403..b01e6c3 100644 --- a/web-v2/pnpm-lock.yaml +++ b/web-v2/pnpm-lock.yaml @@ -7,6 +7,9 @@ settings: importers: .: dependencies: + '@fontsource-variable/inter': + specifier: ^5.2.8 + version: 5.2.8 '@heroui/react': specifier: ^3.0.4 version: 3.0.4(@react-spectrum/provider@3.11.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0) @@ -622,6 +625,12 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@fontsource-variable/inter@5.2.8': + resolution: + { + integrity: sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==, + } + '@formatjs/ecma402-abstract@2.3.6': resolution: { @@ -4757,6 +4766,8 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 + '@fontsource-variable/inter@5.2.8': {} + '@formatjs/ecma402-abstract@2.3.6': dependencies: '@formatjs/fast-memoize': 2.2.7 diff --git a/web-v2/scripts/add-icon.ts b/web-v2/scripts/add-icon.ts index d537348..123c761 100644 --- a/web-v2/scripts/add-icon.ts +++ b/web-v2/scripts/add-icon.ts @@ -67,18 +67,19 @@ async function getIconOptions() { } async function createIconComponent({ name, content }: { name: string; content: string }) { - const fileName = name.toLowerCase().replace(/ /g, '-') + '-icon' - const filePath = `./src/components/icons/${fileName}.tsx` + const componentName = + name + .toLowerCase() + .replace(/ /g, '-') + .replace(/(^\w|-\w)/g, c => c.toUpperCase()) + .replace(/-/g, '') + 'Icon' + const filePath = `./src/components/icons/${componentName}.tsx` - // Check if the file already exists if (fs.existsSync(filePath)) { console.error(chalk.red(`File ${filePath} already exists. Please choose a different name.`)) process.exit(1) } - // Use PascalCase for the component name - const componentName = fileName.replace(/(^\w|-\w)/g, c => c.toUpperCase()).replace(/-/g, '') - const fileContent = ` import type { SVGProps } from "react" diff --git a/web-v2/src/App.tsx b/web-v2/src/App.tsx index c0c4785..8b31ece 100644 --- a/web-v2/src/App.tsx +++ b/web-v2/src/App.tsx @@ -7,6 +7,7 @@ import { AppProviders } from '@/providers/AppProviders' import ErrorBoundary from './components/ErrorBoundary' import BorrowPage from './pages/Borrow' import DashboardPage from './pages/Dashboard' +import DesignSystemPage from './pages/DesignSystem' import SupplyPage from './pages/Supply' const router = createBrowserRouter([ @@ -27,6 +28,10 @@ const router = createBrowserRouter([ path: RoutePath.Supply, element: , }, + { + path: RoutePath.DesignSystem, + element: , + }, ], }, ]) diff --git a/web-v2/src/components/AppLayout.tsx b/web-v2/src/components/AppLayout.tsx index bd55351..122fe4a 100644 --- a/web-v2/src/components/AppLayout.tsx +++ b/web-v2/src/components/AppLayout.tsx @@ -3,30 +3,31 @@ import { Link, Outlet } from 'react-router-dom' import { env } from '@/constants/env' import { RoutePath } from '@/constants/routes' +const NAV = [ + { to: RoutePath.Dashboard, label: 'Dashboard' }, + { to: RoutePath.Borrow, label: 'Borrow' }, + { to: RoutePath.Supply, label: 'Supply' }, + { to: RoutePath.DesignSystem, label: 'System' }, +] + export default function AppLayout() { return ( -
+
-
-

Lending

+
+

Lending

-
- -
+ -