diff --git a/tone-page-web/app/favicon.ico b/tone-page-web/app/favicon.ico index 718d6fe..46d8972 100644 Binary files a/tone-page-web/app/favicon.ico and b/tone-page-web/app/favicon.ico differ diff --git a/tone-page-web/app/globals.css b/tone-page-web/app/globals.css index dc98be7..0a00352 100644 --- a/tone-page-web/app/globals.css +++ b/tone-page-web/app/globals.css @@ -116,7 +116,32 @@ * { @apply border-border outline-ring/50; } + body { @apply bg-background text-foreground; } } + +@keyframes gradient-text { + 0% { + background-position: 0% center; + } + + 100% { + background-position: -200% center; + } +} + +.gradient-title { + background: linear-gradient(30deg, + #2657e8 0%, + #ef0c7e 25%, + #3527f5 50%, + #ec1111 75%, + #2657e8 100%); + background-size: 400% 200%; + color: transparent; + background-clip: text; + -webkit-background-clip: text; + animation: gradient-text 20s linear infinite; +} \ No newline at end of file diff --git a/tone-page-web/app/layout.tsx b/tone-page-web/app/layout.tsx index 288bd5c..7fd9a77 100644 --- a/tone-page-web/app/layout.tsx +++ b/tone-page-web/app/layout.tsx @@ -1,4 +1,3 @@ -import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import "./globals.css"; import { ThemeProvider } from "./components/theme-provider"; @@ -37,7 +36,7 @@ export default function RootLayout({ disableTransitionOnChange >
-
+
{children}
diff --git a/tone-page-web/app/page.tsx b/tone-page-web/app/page.tsx index e7ed788..ae98698 100644 --- a/tone-page-web/app/page.tsx +++ b/tone-page-web/app/page.tsx @@ -1,7 +1,16 @@ +'use client'; +import favicon from './favicon.ico'; + export default function Home() { return ( -
- 1312能哦 +
+ +

特恩(TONE)

+

一名啥都会一点点的程序员

+
+ 哔哩哔哩 + GitHub +
); } diff --git a/tone-page-web/components/ui/avatar.tsx b/tone-page-web/components/ui/avatar.tsx new file mode 100644 index 0000000..71e428b --- /dev/null +++ b/tone-page-web/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +"use client" + +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/tone-page-web/package.json b/tone-page-web/package.json index d6f254a..a972e1f 100644 --- a/tone-page-web/package.json +++ b/tone-page-web/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@radix-ui/react-avatar": "^1.1.7", "@radix-ui/react-dialog": "^1.1.11", "@radix-ui/react-hover-card": "^1.1.11", "@radix-ui/react-navigation-menu": "^1.2.10", diff --git a/tone-page-web/pnpm-lock.yaml b/tone-page-web/pnpm-lock.yaml index 8c361df..553c4c2 100644 --- a/tone-page-web/pnpm-lock.yaml +++ b/tone-page-web/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@radix-ui/react-avatar': + specifier: ^1.1.7 + version: 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dialog': specifier: ^1.1.11 version: 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -389,6 +392,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-avatar@1.1.7': + resolution: {integrity: sha512-V7ODUt4mUoJTe3VUxZw6nfURxaPALVqmDQh501YmaQsk3D8AZQrOPRnfKn4H7JGDLBc0KqLhT94H79nV88ppNg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.1.4': resolution: {integrity: sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==} peerDependencies: @@ -622,6 +638,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-is-hydrated@0.1.0': + resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: @@ -2163,6 +2188,11 @@ packages: '@types/react': optional: true + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + vaul@1.1.2: resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} peerDependencies: @@ -2432,6 +2462,19 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-avatar@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-collection@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) @@ -2665,6 +2708,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + use-sync-external-store: 1.5.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.2)(react@19.1.0)': dependencies: react: 19.1.0 @@ -4404,6 +4454,10 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + use-sync-external-store@1.5.0(react@19.1.0): + dependencies: + react: 19.1.0 + vaul@1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)