@sei-js/create-sei 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rsyncignore +0 -2
- package/CHANGELOG.md +17 -0
- package/dist/templates/next-template/.env.example +1 -1
- package/dist/templates/next-template/.eslintrc.json +1 -3
- package/dist/templates/next-template/README.md +2 -6
- package/dist/templates/next-template/biome.json +16 -8
- package/dist/templates/next-template/next.config.mjs +14 -1
- package/dist/templates/next-template/package.json +2 -0
- package/dist/templates/next-template/src/app/globals.css +12 -10
- package/dist/templates/next-template/src/components/landing/index.tsx +55 -7
- package/dist/templates/next-template/src/components/providers/providers.tsx +41 -22
- package/dist/templates/next-template/src/components/shell/shell.tsx +21 -20
- package/dist/templates/next-template/tailwind.config.js +4 -16
- package/package.json +6 -1
- package/templates/next-template/.env.example +1 -1
- package/templates/next-template/.eslintrc.json +1 -3
- package/templates/next-template/README.md +2 -6
- package/templates/next-template/biome.json +16 -8
- package/templates/next-template/next.config.mjs +14 -1
- package/templates/next-template/package.json +2 -0
- package/templates/next-template/src/app/globals.css +12 -10
- package/templates/next-template/src/components/landing/index.tsx +55 -7
- package/templates/next-template/src/components/providers/providers.tsx +41 -22
- package/templates/next-template/src/components/shell/shell.tsx +21 -20
- package/templates/next-template/tailwind.config.js +4 -16
package/.rsyncignore
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @sei-js/create-sei-app
|
|
2
2
|
|
|
3
|
+
## 1.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2666156: Harden the workspace against the 2026-07-14 "Miasma RAT" AsyncAPI supply-chain incident by pinning `@asyncapi/*` packages to non-compromised versions via root `pnpm.overrides`.
|
|
8
|
+
|
|
9
|
+
This stops a fresh install or lockfile regeneration from floating `@asyncapi/specs` up into the compromised `6.11.2` through the `mint` docs toolchain (`mint` → `@asyncapi/parser`). Resolved change: `@asyncapi/specs` `6.10.0` → `6.11.1`; `@asyncapi/generator`, `@asyncapi/generator-helpers`, and `@asyncapi/generator-components` are pinned preventively.
|
|
10
|
+
|
|
11
|
+
No shipped code or public API changes in this package — this is a repository/CI hardening release.
|
|
12
|
+
|
|
13
|
+
- 9168186: Improve the `next-template` runtime defaults generated by `create-sei`.
|
|
14
|
+
|
|
15
|
+
- Add a `prebuild` Biome check and include Biome in template dev dependencies.
|
|
16
|
+
- Configure Next.js to allow Sei CDN images and skip ESLint during builds.
|
|
17
|
+
- Update provider and shell setup for improved chain/image handling.
|
|
18
|
+
- Align template config/docs with current defaults (`.env.example`, `README`, Biome, Tailwind v4 config).
|
|
19
|
+
|
|
3
20
|
## 1.0.0
|
|
4
21
|
|
|
5
22
|
### Major Changes
|
|
@@ -4,17 +4,13 @@ This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next
|
|
|
4
4
|
|
|
5
5
|
Install dependencies by running
|
|
6
6
|
```bash
|
|
7
|
-
|
|
8
|
-
#or
|
|
9
|
-
yarn
|
|
7
|
+
bun install
|
|
10
8
|
```
|
|
11
9
|
|
|
12
10
|
Then, run the development server:
|
|
13
11
|
|
|
14
12
|
```bash
|
|
15
|
-
|
|
16
|
-
# or
|
|
17
|
-
yarn dev
|
|
13
|
+
bun run dev
|
|
18
14
|
```
|
|
19
15
|
|
|
20
16
|
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://biomejs.dev/schemas/
|
|
3
|
-
"
|
|
4
|
-
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.4.5/schema.json",
|
|
3
|
+
"root": true,
|
|
4
|
+
"assist": {
|
|
5
|
+
"actions": {
|
|
6
|
+
"source": {
|
|
7
|
+
"organizeImports": "on"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
5
10
|
},
|
|
6
11
|
"linter": {
|
|
7
12
|
"enabled": true,
|
|
@@ -20,8 +25,7 @@
|
|
|
20
25
|
"formatWithErrors": false,
|
|
21
26
|
"indentStyle": "tab",
|
|
22
27
|
"lineEnding": "lf",
|
|
23
|
-
"lineWidth": 160
|
|
24
|
-
"attributePosition": "auto"
|
|
28
|
+
"lineWidth": 160
|
|
25
29
|
},
|
|
26
30
|
"javascript": {
|
|
27
31
|
"formatter": {
|
|
@@ -32,8 +36,12 @@
|
|
|
32
36
|
"arrowParentheses": "always",
|
|
33
37
|
"bracketSpacing": true,
|
|
34
38
|
"bracketSameLine": false,
|
|
35
|
-
"quoteStyle": "
|
|
36
|
-
|
|
39
|
+
"quoteStyle": "double"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"css": {
|
|
43
|
+
"parser": {
|
|
44
|
+
"tailwindDirectives": true
|
|
37
45
|
}
|
|
38
46
|
},
|
|
39
47
|
"json": {
|
|
@@ -42,7 +50,7 @@
|
|
|
42
50
|
}
|
|
43
51
|
},
|
|
44
52
|
"files": {
|
|
45
|
-
"
|
|
53
|
+
"includes": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.css", "*.json", "*.md"],
|
|
46
54
|
"ignore": ["node_modules/**", "dist/**", ".next/**", ".yarn/**"]
|
|
47
55
|
}
|
|
48
56
|
}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
/** @type {import('next').NextConfig} */
|
|
2
|
-
const nextConfig = {
|
|
2
|
+
const nextConfig = {
|
|
3
|
+
eslint: {
|
|
4
|
+
// Linting is handled by Biome — skip ESLint during builds.
|
|
5
|
+
ignoreDuringBuilds: true,
|
|
6
|
+
},
|
|
7
|
+
images: {
|
|
8
|
+
remotePatterns: [
|
|
9
|
+
{
|
|
10
|
+
protocol: "https",
|
|
11
|
+
hostname: "cdn.sei.io",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
};
|
|
3
16
|
|
|
4
17
|
export default nextConfig;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "next dev",
|
|
7
|
+
"prebuild": "biome check .",
|
|
7
8
|
"build": "next build",
|
|
8
9
|
"start": "next start",
|
|
9
10
|
"lint": "biome lint .",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"wagmi": "^2.16.4"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
39
|
+
"@biomejs/biome": "^2.4.5",
|
|
38
40
|
"@types/node": "^24.3.0",
|
|
39
41
|
"@types/react": "^19.1.10",
|
|
40
42
|
"@types/react-dom": "^19.1.7",
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
1
2
|
|
|
2
|
-
@
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
@theme {
|
|
4
|
+
--color-sei-red: #9e1f19;
|
|
5
|
+
--color-sei-dark: #1a1a1a;
|
|
6
|
+
}
|
|
5
7
|
|
|
6
8
|
@layer base {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
html {
|
|
10
|
+
@apply h-full;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
@apply h-full bg-gray-50 text-gray-900 antialiased;
|
|
15
|
+
}
|
|
14
16
|
}
|
|
@@ -21,33 +21,81 @@ export default function Landing() {
|
|
|
21
21
|
|
|
22
22
|
{/* Tech Stack Badges */}
|
|
23
23
|
<Group gap="xs" mt="sm">
|
|
24
|
-
<Badge
|
|
24
|
+
<Badge
|
|
25
|
+
variant="light"
|
|
26
|
+
color="blue"
|
|
27
|
+
style={{
|
|
28
|
+
backgroundColor: 'rgb(239 246 255)',
|
|
29
|
+
color: 'rgb(29 78 216)',
|
|
30
|
+
border: '1px solid rgb(191 219 254)',
|
|
31
|
+
}}
|
|
32
|
+
>
|
|
25
33
|
Next.js 14
|
|
26
34
|
</Badge>
|
|
27
35
|
<Badge
|
|
28
36
|
variant="light"
|
|
29
37
|
color="violet"
|
|
30
|
-
style={{
|
|
38
|
+
style={{
|
|
39
|
+
backgroundColor: 'rgb(250 245 255)',
|
|
40
|
+
color: 'rgb(109 40 217)',
|
|
41
|
+
border: '1px solid rgb(196 181 253)',
|
|
42
|
+
}}
|
|
31
43
|
>
|
|
32
44
|
Mantine UI
|
|
33
45
|
</Badge>
|
|
34
|
-
<Badge
|
|
46
|
+
<Badge
|
|
47
|
+
variant="light"
|
|
48
|
+
color="cyan"
|
|
49
|
+
style={{
|
|
50
|
+
backgroundColor: 'rgb(236 254 255)',
|
|
51
|
+
color: 'rgb(14 116 144)',
|
|
52
|
+
border: '1px solid rgb(165 243 252)',
|
|
53
|
+
}}
|
|
54
|
+
>
|
|
35
55
|
Tailwind CSS
|
|
36
56
|
</Badge>
|
|
37
|
-
<Badge
|
|
57
|
+
<Badge
|
|
58
|
+
variant="light"
|
|
59
|
+
color="yellow"
|
|
60
|
+
style={{
|
|
61
|
+
backgroundColor: 'rgb(254 249 195)',
|
|
62
|
+
color: 'rgb(161 98 7)',
|
|
63
|
+
border: '1px solid rgb(254 240 138)',
|
|
64
|
+
}}
|
|
65
|
+
>
|
|
38
66
|
Biome
|
|
39
67
|
</Badge>
|
|
40
68
|
<Badge
|
|
41
69
|
variant="light"
|
|
42
70
|
color="orange"
|
|
43
|
-
style={{
|
|
71
|
+
style={{
|
|
72
|
+
backgroundColor: 'rgb(255 247 237)',
|
|
73
|
+
color: 'rgb(194 65 12)',
|
|
74
|
+
border: '1px solid rgb(254 215 170)',
|
|
75
|
+
}}
|
|
44
76
|
>
|
|
45
77
|
RainbowKit
|
|
46
78
|
</Badge>
|
|
47
|
-
<Badge
|
|
79
|
+
<Badge
|
|
80
|
+
variant="light"
|
|
81
|
+
color="teal"
|
|
82
|
+
style={{
|
|
83
|
+
backgroundColor: 'rgb(240 253 250)',
|
|
84
|
+
color: 'rgb(15 118 110)',
|
|
85
|
+
border: '1px solid rgb(153 246 228)',
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
48
88
|
Wagmi + Viem
|
|
49
89
|
</Badge>
|
|
50
|
-
<Badge
|
|
90
|
+
<Badge
|
|
91
|
+
variant="light"
|
|
92
|
+
color="dark"
|
|
93
|
+
style={{
|
|
94
|
+
backgroundColor: 'rgb(249 250 251)',
|
|
95
|
+
color: 'rgb(17 24 39)',
|
|
96
|
+
border: '1px solid rgb(209 213 219)',
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
51
99
|
Vercel
|
|
52
100
|
</Badge>
|
|
53
101
|
</Group>
|
|
@@ -1,28 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import { MantineProvider } from
|
|
4
|
-
import { Notifications } from
|
|
5
|
-
import {
|
|
6
|
-
import { metaMaskWallet } from
|
|
7
|
-
import { QueryClient, QueryClientProvider } from
|
|
8
|
-
import { type ReactNode, useMemo } from
|
|
9
|
-
import { http, WagmiProvider
|
|
3
|
+
import { MantineProvider } from "@mantine/core";
|
|
4
|
+
import { Notifications } from "@mantine/notifications";
|
|
5
|
+
import { connectorsForWallets, lightTheme, RainbowKitProvider } from "@rainbow-me/rainbowkit";
|
|
6
|
+
import { metaMaskWallet } from "@rainbow-me/rainbowkit/wallets";
|
|
7
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
8
|
+
import { type ReactNode, useMemo } from "react";
|
|
9
|
+
import { createConfig, http, WagmiProvider } from "wagmi";
|
|
10
10
|
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
11
|
+
import "@rainbow-me/rainbowkit/styles.css";
|
|
12
|
+
import { defineChain } from "viem";
|
|
13
|
+
import { sei, seiTestnet } from "viem/chains";
|
|
14
|
+
|
|
15
|
+
const seiDevnet = defineChain({
|
|
16
|
+
id: 713715,
|
|
17
|
+
name: "Sei Devnet",
|
|
18
|
+
nativeCurrency: { name: "Sei", symbol: "SEI", decimals: 18 },
|
|
19
|
+
rpcUrls: {
|
|
20
|
+
default: {
|
|
21
|
+
http: ["https://evm-rpc-arctic-1.sei-apis.com"],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
blockExplorers: {
|
|
25
|
+
default: {
|
|
26
|
+
name: "Seitrace",
|
|
27
|
+
url: "https://seitrace.com",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
testnet: true,
|
|
31
|
+
});
|
|
13
32
|
|
|
14
33
|
const queryClient = new QueryClient();
|
|
15
34
|
|
|
16
35
|
const connectors = connectorsForWallets(
|
|
17
36
|
[
|
|
18
37
|
{
|
|
19
|
-
groupName:
|
|
38
|
+
groupName: "Recommended",
|
|
20
39
|
wallets: [metaMaskWallet],
|
|
21
40
|
},
|
|
22
41
|
],
|
|
23
42
|
{
|
|
24
|
-
appName:
|
|
25
|
-
projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID ||
|
|
43
|
+
appName: "Sei dApp",
|
|
44
|
+
projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || "your-project-id",
|
|
26
45
|
}
|
|
27
46
|
);
|
|
28
47
|
|
|
@@ -33,11 +52,11 @@ interface ProvidersProps {
|
|
|
33
52
|
export default function Providers({ children }: ProvidersProps) {
|
|
34
53
|
// Chain selection via environment variable, defaults to sei mainnet
|
|
35
54
|
const getSelectedChain = () => {
|
|
36
|
-
const chainName = process.env.NEXT_PUBLIC_CHAIN ||
|
|
55
|
+
const chainName = process.env.NEXT_PUBLIC_CHAIN || "mainnet";
|
|
37
56
|
switch (chainName.toLowerCase()) {
|
|
38
|
-
case
|
|
57
|
+
case "testnet":
|
|
39
58
|
return seiTestnet;
|
|
40
|
-
case
|
|
59
|
+
case "devnet":
|
|
41
60
|
return seiDevnet;
|
|
42
61
|
default:
|
|
43
62
|
return sei;
|
|
@@ -68,14 +87,14 @@ export default function Providers({ children }: ProvidersProps) {
|
|
|
68
87
|
<Notifications />
|
|
69
88
|
<RainbowKitProvider
|
|
70
89
|
theme={lightTheme({
|
|
71
|
-
accentColor:
|
|
72
|
-
accentColorForeground:
|
|
73
|
-
borderRadius:
|
|
74
|
-
fontStack:
|
|
90
|
+
accentColor: "#9E1F19",
|
|
91
|
+
accentColorForeground: "white",
|
|
92
|
+
borderRadius: "medium",
|
|
93
|
+
fontStack: "system",
|
|
75
94
|
})}
|
|
76
95
|
appInfo={{
|
|
77
|
-
appName:
|
|
78
|
-
learnMoreUrl:
|
|
96
|
+
appName: "Sei dApp",
|
|
97
|
+
learnMoreUrl: "https://docs.sei.io/learn/wallets",
|
|
79
98
|
}}
|
|
80
99
|
modalSize="compact"
|
|
81
100
|
initialChain={chain.id}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import { ActionIcon, AppShell, Container, Group } from
|
|
4
|
-
import { ConnectButton } from
|
|
5
|
-
import { IconBook, IconCode, IconLogout } from
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
3
|
+
import { ActionIcon, AppShell, Container, Group } from "@mantine/core";
|
|
4
|
+
import { ConnectButton } from "@rainbow-me/rainbowkit";
|
|
5
|
+
import { IconBook, IconCode, IconLogout } from "@tabler/icons-react";
|
|
6
|
+
import Image from "next/image";
|
|
7
|
+
import Link from "next/link";
|
|
8
|
+
import type { PropsWithChildren } from "react";
|
|
9
|
+
import { useAccount, useDisconnect } from "wagmi";
|
|
9
10
|
|
|
10
11
|
export default function Shell({ children }: PropsWithChildren) {
|
|
11
12
|
const { address, isConnected } = useAccount();
|
|
@@ -17,7 +18,7 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
17
18
|
<Container size="xl" h="100%">
|
|
18
19
|
<Group justify="space-between" align="center" h="100%">
|
|
19
20
|
<Link href="/" aria-label="Sei">
|
|
20
|
-
<
|
|
21
|
+
<Image src="https://cdn.sei.io/assets/sei-icon.svg" alt="Sei" width={28} height={28} style={{ display: "block" }} />
|
|
21
22
|
</Link>
|
|
22
23
|
<Group align="center" gap="md">
|
|
23
24
|
<ActionIcon
|
|
@@ -29,10 +30,10 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
29
30
|
radius="md"
|
|
30
31
|
aria-label="View Resources"
|
|
31
32
|
style={{
|
|
32
|
-
transition:
|
|
33
|
-
|
|
34
|
-
transform:
|
|
35
|
-
boxShadow:
|
|
33
|
+
transition: "all 0.2s ease",
|
|
34
|
+
"&:hover": {
|
|
35
|
+
transform: "translateY(-1px)",
|
|
36
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
36
37
|
},
|
|
37
38
|
}}
|
|
38
39
|
>
|
|
@@ -47,10 +48,10 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
47
48
|
radius="md"
|
|
48
49
|
aria-label="View Development Guide"
|
|
49
50
|
style={{
|
|
50
|
-
transition:
|
|
51
|
-
|
|
52
|
-
transform:
|
|
53
|
-
boxShadow:
|
|
51
|
+
transition: "all 0.2s ease",
|
|
52
|
+
"&:hover": {
|
|
53
|
+
transform: "translateY(-1px)",
|
|
54
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
54
55
|
},
|
|
55
56
|
}}
|
|
56
57
|
>
|
|
@@ -65,10 +66,10 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
65
66
|
onClick={() => disconnect()}
|
|
66
67
|
aria-label="Disconnect Wallet"
|
|
67
68
|
style={{
|
|
68
|
-
transition:
|
|
69
|
-
|
|
70
|
-
transform:
|
|
71
|
-
boxShadow:
|
|
69
|
+
transition: "all 0.2s ease",
|
|
70
|
+
"&:hover": {
|
|
71
|
+
transform: "translateY(-1px)",
|
|
72
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
72
73
|
},
|
|
73
74
|
}}
|
|
74
75
|
>
|
|
@@ -1,17 +1,5 @@
|
|
|
1
|
+
// Tailwind v4 uses CSS-first configuration.
|
|
2
|
+
// Custom theme values are defined in src/app/globals.css via @theme.
|
|
3
|
+
// This file is kept as an empty config for compatibility.
|
|
1
4
|
/** @type {import('tailwindcss').Config} */
|
|
2
|
-
module.exports = {
|
|
3
|
-
content: [
|
|
4
|
-
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
|
5
|
-
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
|
6
|
-
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
|
7
|
-
],
|
|
8
|
-
theme: {
|
|
9
|
-
extend: {
|
|
10
|
-
colors: {
|
|
11
|
-
'sei-red': '#9E1F19',
|
|
12
|
-
'sei-dark': '#1a1a1a',
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
plugins: [],
|
|
17
|
-
}
|
|
5
|
+
module.exports = {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sei-js/create-sei",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/sei-protocol/sei-js.git",
|
|
7
|
+
"directory": "packages/create-sei"
|
|
8
|
+
},
|
|
4
9
|
"module": "dist/main.js",
|
|
5
10
|
"type": "module",
|
|
6
11
|
"bin": "./dist/main.js",
|
|
@@ -4,17 +4,13 @@ This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next
|
|
|
4
4
|
|
|
5
5
|
Install dependencies by running
|
|
6
6
|
```bash
|
|
7
|
-
|
|
8
|
-
#or
|
|
9
|
-
yarn
|
|
7
|
+
bun install
|
|
10
8
|
```
|
|
11
9
|
|
|
12
10
|
Then, run the development server:
|
|
13
11
|
|
|
14
12
|
```bash
|
|
15
|
-
|
|
16
|
-
# or
|
|
17
|
-
yarn dev
|
|
13
|
+
bun run dev
|
|
18
14
|
```
|
|
19
15
|
|
|
20
16
|
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://biomejs.dev/schemas/
|
|
3
|
-
"
|
|
4
|
-
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.4.5/schema.json",
|
|
3
|
+
"root": true,
|
|
4
|
+
"assist": {
|
|
5
|
+
"actions": {
|
|
6
|
+
"source": {
|
|
7
|
+
"organizeImports": "on"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
5
10
|
},
|
|
6
11
|
"linter": {
|
|
7
12
|
"enabled": true,
|
|
@@ -20,8 +25,7 @@
|
|
|
20
25
|
"formatWithErrors": false,
|
|
21
26
|
"indentStyle": "tab",
|
|
22
27
|
"lineEnding": "lf",
|
|
23
|
-
"lineWidth": 160
|
|
24
|
-
"attributePosition": "auto"
|
|
28
|
+
"lineWidth": 160
|
|
25
29
|
},
|
|
26
30
|
"javascript": {
|
|
27
31
|
"formatter": {
|
|
@@ -32,8 +36,12 @@
|
|
|
32
36
|
"arrowParentheses": "always",
|
|
33
37
|
"bracketSpacing": true,
|
|
34
38
|
"bracketSameLine": false,
|
|
35
|
-
"quoteStyle": "
|
|
36
|
-
|
|
39
|
+
"quoteStyle": "double"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"css": {
|
|
43
|
+
"parser": {
|
|
44
|
+
"tailwindDirectives": true
|
|
37
45
|
}
|
|
38
46
|
},
|
|
39
47
|
"json": {
|
|
@@ -42,7 +50,7 @@
|
|
|
42
50
|
}
|
|
43
51
|
},
|
|
44
52
|
"files": {
|
|
45
|
-
"
|
|
53
|
+
"includes": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.css", "*.json", "*.md"],
|
|
46
54
|
"ignore": ["node_modules/**", "dist/**", ".next/**", ".yarn/**"]
|
|
47
55
|
}
|
|
48
56
|
}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
/** @type {import('next').NextConfig} */
|
|
2
|
-
const nextConfig = {
|
|
2
|
+
const nextConfig = {
|
|
3
|
+
eslint: {
|
|
4
|
+
// Linting is handled by Biome — skip ESLint during builds.
|
|
5
|
+
ignoreDuringBuilds: true,
|
|
6
|
+
},
|
|
7
|
+
images: {
|
|
8
|
+
remotePatterns: [
|
|
9
|
+
{
|
|
10
|
+
protocol: "https",
|
|
11
|
+
hostname: "cdn.sei.io",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
};
|
|
3
16
|
|
|
4
17
|
export default nextConfig;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "next dev",
|
|
7
|
+
"prebuild": "biome check .",
|
|
7
8
|
"build": "next build",
|
|
8
9
|
"start": "next start",
|
|
9
10
|
"lint": "biome lint .",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"wagmi": "^2.16.4"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
39
|
+
"@biomejs/biome": "^2.4.5",
|
|
38
40
|
"@types/node": "^24.3.0",
|
|
39
41
|
"@types/react": "^19.1.10",
|
|
40
42
|
"@types/react-dom": "^19.1.7",
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
1
2
|
|
|
2
|
-
@
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
@theme {
|
|
4
|
+
--color-sei-red: #9e1f19;
|
|
5
|
+
--color-sei-dark: #1a1a1a;
|
|
6
|
+
}
|
|
5
7
|
|
|
6
8
|
@layer base {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
html {
|
|
10
|
+
@apply h-full;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
@apply h-full bg-gray-50 text-gray-900 antialiased;
|
|
15
|
+
}
|
|
14
16
|
}
|
|
@@ -21,33 +21,81 @@ export default function Landing() {
|
|
|
21
21
|
|
|
22
22
|
{/* Tech Stack Badges */}
|
|
23
23
|
<Group gap="xs" mt="sm">
|
|
24
|
-
<Badge
|
|
24
|
+
<Badge
|
|
25
|
+
variant="light"
|
|
26
|
+
color="blue"
|
|
27
|
+
style={{
|
|
28
|
+
backgroundColor: 'rgb(239 246 255)',
|
|
29
|
+
color: 'rgb(29 78 216)',
|
|
30
|
+
border: '1px solid rgb(191 219 254)',
|
|
31
|
+
}}
|
|
32
|
+
>
|
|
25
33
|
Next.js 14
|
|
26
34
|
</Badge>
|
|
27
35
|
<Badge
|
|
28
36
|
variant="light"
|
|
29
37
|
color="violet"
|
|
30
|
-
style={{
|
|
38
|
+
style={{
|
|
39
|
+
backgroundColor: 'rgb(250 245 255)',
|
|
40
|
+
color: 'rgb(109 40 217)',
|
|
41
|
+
border: '1px solid rgb(196 181 253)',
|
|
42
|
+
}}
|
|
31
43
|
>
|
|
32
44
|
Mantine UI
|
|
33
45
|
</Badge>
|
|
34
|
-
<Badge
|
|
46
|
+
<Badge
|
|
47
|
+
variant="light"
|
|
48
|
+
color="cyan"
|
|
49
|
+
style={{
|
|
50
|
+
backgroundColor: 'rgb(236 254 255)',
|
|
51
|
+
color: 'rgb(14 116 144)',
|
|
52
|
+
border: '1px solid rgb(165 243 252)',
|
|
53
|
+
}}
|
|
54
|
+
>
|
|
35
55
|
Tailwind CSS
|
|
36
56
|
</Badge>
|
|
37
|
-
<Badge
|
|
57
|
+
<Badge
|
|
58
|
+
variant="light"
|
|
59
|
+
color="yellow"
|
|
60
|
+
style={{
|
|
61
|
+
backgroundColor: 'rgb(254 249 195)',
|
|
62
|
+
color: 'rgb(161 98 7)',
|
|
63
|
+
border: '1px solid rgb(254 240 138)',
|
|
64
|
+
}}
|
|
65
|
+
>
|
|
38
66
|
Biome
|
|
39
67
|
</Badge>
|
|
40
68
|
<Badge
|
|
41
69
|
variant="light"
|
|
42
70
|
color="orange"
|
|
43
|
-
style={{
|
|
71
|
+
style={{
|
|
72
|
+
backgroundColor: 'rgb(255 247 237)',
|
|
73
|
+
color: 'rgb(194 65 12)',
|
|
74
|
+
border: '1px solid rgb(254 215 170)',
|
|
75
|
+
}}
|
|
44
76
|
>
|
|
45
77
|
RainbowKit
|
|
46
78
|
</Badge>
|
|
47
|
-
<Badge
|
|
79
|
+
<Badge
|
|
80
|
+
variant="light"
|
|
81
|
+
color="teal"
|
|
82
|
+
style={{
|
|
83
|
+
backgroundColor: 'rgb(240 253 250)',
|
|
84
|
+
color: 'rgb(15 118 110)',
|
|
85
|
+
border: '1px solid rgb(153 246 228)',
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
48
88
|
Wagmi + Viem
|
|
49
89
|
</Badge>
|
|
50
|
-
<Badge
|
|
90
|
+
<Badge
|
|
91
|
+
variant="light"
|
|
92
|
+
color="dark"
|
|
93
|
+
style={{
|
|
94
|
+
backgroundColor: 'rgb(249 250 251)',
|
|
95
|
+
color: 'rgb(17 24 39)',
|
|
96
|
+
border: '1px solid rgb(209 213 219)',
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
51
99
|
Vercel
|
|
52
100
|
</Badge>
|
|
53
101
|
</Group>
|
|
@@ -1,28 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import { MantineProvider } from
|
|
4
|
-
import { Notifications } from
|
|
5
|
-
import {
|
|
6
|
-
import { metaMaskWallet } from
|
|
7
|
-
import { QueryClient, QueryClientProvider } from
|
|
8
|
-
import { type ReactNode, useMemo } from
|
|
9
|
-
import { http, WagmiProvider
|
|
3
|
+
import { MantineProvider } from "@mantine/core";
|
|
4
|
+
import { Notifications } from "@mantine/notifications";
|
|
5
|
+
import { connectorsForWallets, lightTheme, RainbowKitProvider } from "@rainbow-me/rainbowkit";
|
|
6
|
+
import { metaMaskWallet } from "@rainbow-me/rainbowkit/wallets";
|
|
7
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
8
|
+
import { type ReactNode, useMemo } from "react";
|
|
9
|
+
import { createConfig, http, WagmiProvider } from "wagmi";
|
|
10
10
|
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
11
|
+
import "@rainbow-me/rainbowkit/styles.css";
|
|
12
|
+
import { defineChain } from "viem";
|
|
13
|
+
import { sei, seiTestnet } from "viem/chains";
|
|
14
|
+
|
|
15
|
+
const seiDevnet = defineChain({
|
|
16
|
+
id: 713715,
|
|
17
|
+
name: "Sei Devnet",
|
|
18
|
+
nativeCurrency: { name: "Sei", symbol: "SEI", decimals: 18 },
|
|
19
|
+
rpcUrls: {
|
|
20
|
+
default: {
|
|
21
|
+
http: ["https://evm-rpc-arctic-1.sei-apis.com"],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
blockExplorers: {
|
|
25
|
+
default: {
|
|
26
|
+
name: "Seitrace",
|
|
27
|
+
url: "https://seitrace.com",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
testnet: true,
|
|
31
|
+
});
|
|
13
32
|
|
|
14
33
|
const queryClient = new QueryClient();
|
|
15
34
|
|
|
16
35
|
const connectors = connectorsForWallets(
|
|
17
36
|
[
|
|
18
37
|
{
|
|
19
|
-
groupName:
|
|
38
|
+
groupName: "Recommended",
|
|
20
39
|
wallets: [metaMaskWallet],
|
|
21
40
|
},
|
|
22
41
|
],
|
|
23
42
|
{
|
|
24
|
-
appName:
|
|
25
|
-
projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID ||
|
|
43
|
+
appName: "Sei dApp",
|
|
44
|
+
projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || "your-project-id",
|
|
26
45
|
}
|
|
27
46
|
);
|
|
28
47
|
|
|
@@ -33,11 +52,11 @@ interface ProvidersProps {
|
|
|
33
52
|
export default function Providers({ children }: ProvidersProps) {
|
|
34
53
|
// Chain selection via environment variable, defaults to sei mainnet
|
|
35
54
|
const getSelectedChain = () => {
|
|
36
|
-
const chainName = process.env.NEXT_PUBLIC_CHAIN ||
|
|
55
|
+
const chainName = process.env.NEXT_PUBLIC_CHAIN || "mainnet";
|
|
37
56
|
switch (chainName.toLowerCase()) {
|
|
38
|
-
case
|
|
57
|
+
case "testnet":
|
|
39
58
|
return seiTestnet;
|
|
40
|
-
case
|
|
59
|
+
case "devnet":
|
|
41
60
|
return seiDevnet;
|
|
42
61
|
default:
|
|
43
62
|
return sei;
|
|
@@ -68,14 +87,14 @@ export default function Providers({ children }: ProvidersProps) {
|
|
|
68
87
|
<Notifications />
|
|
69
88
|
<RainbowKitProvider
|
|
70
89
|
theme={lightTheme({
|
|
71
|
-
accentColor:
|
|
72
|
-
accentColorForeground:
|
|
73
|
-
borderRadius:
|
|
74
|
-
fontStack:
|
|
90
|
+
accentColor: "#9E1F19",
|
|
91
|
+
accentColorForeground: "white",
|
|
92
|
+
borderRadius: "medium",
|
|
93
|
+
fontStack: "system",
|
|
75
94
|
})}
|
|
76
95
|
appInfo={{
|
|
77
|
-
appName:
|
|
78
|
-
learnMoreUrl:
|
|
96
|
+
appName: "Sei dApp",
|
|
97
|
+
learnMoreUrl: "https://docs.sei.io/learn/wallets",
|
|
79
98
|
}}
|
|
80
99
|
modalSize="compact"
|
|
81
100
|
initialChain={chain.id}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import { ActionIcon, AppShell, Container, Group } from
|
|
4
|
-
import { ConnectButton } from
|
|
5
|
-
import { IconBook, IconCode, IconLogout } from
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
3
|
+
import { ActionIcon, AppShell, Container, Group } from "@mantine/core";
|
|
4
|
+
import { ConnectButton } from "@rainbow-me/rainbowkit";
|
|
5
|
+
import { IconBook, IconCode, IconLogout } from "@tabler/icons-react";
|
|
6
|
+
import Image from "next/image";
|
|
7
|
+
import Link from "next/link";
|
|
8
|
+
import type { PropsWithChildren } from "react";
|
|
9
|
+
import { useAccount, useDisconnect } from "wagmi";
|
|
9
10
|
|
|
10
11
|
export default function Shell({ children }: PropsWithChildren) {
|
|
11
12
|
const { address, isConnected } = useAccount();
|
|
@@ -17,7 +18,7 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
17
18
|
<Container size="xl" h="100%">
|
|
18
19
|
<Group justify="space-between" align="center" h="100%">
|
|
19
20
|
<Link href="/" aria-label="Sei">
|
|
20
|
-
<
|
|
21
|
+
<Image src="https://cdn.sei.io/assets/sei-icon.svg" alt="Sei" width={28} height={28} style={{ display: "block" }} />
|
|
21
22
|
</Link>
|
|
22
23
|
<Group align="center" gap="md">
|
|
23
24
|
<ActionIcon
|
|
@@ -29,10 +30,10 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
29
30
|
radius="md"
|
|
30
31
|
aria-label="View Resources"
|
|
31
32
|
style={{
|
|
32
|
-
transition:
|
|
33
|
-
|
|
34
|
-
transform:
|
|
35
|
-
boxShadow:
|
|
33
|
+
transition: "all 0.2s ease",
|
|
34
|
+
"&:hover": {
|
|
35
|
+
transform: "translateY(-1px)",
|
|
36
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
36
37
|
},
|
|
37
38
|
}}
|
|
38
39
|
>
|
|
@@ -47,10 +48,10 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
47
48
|
radius="md"
|
|
48
49
|
aria-label="View Development Guide"
|
|
49
50
|
style={{
|
|
50
|
-
transition:
|
|
51
|
-
|
|
52
|
-
transform:
|
|
53
|
-
boxShadow:
|
|
51
|
+
transition: "all 0.2s ease",
|
|
52
|
+
"&:hover": {
|
|
53
|
+
transform: "translateY(-1px)",
|
|
54
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
54
55
|
},
|
|
55
56
|
}}
|
|
56
57
|
>
|
|
@@ -65,10 +66,10 @@ export default function Shell({ children }: PropsWithChildren) {
|
|
|
65
66
|
onClick={() => disconnect()}
|
|
66
67
|
aria-label="Disconnect Wallet"
|
|
67
68
|
style={{
|
|
68
|
-
transition:
|
|
69
|
-
|
|
70
|
-
transform:
|
|
71
|
-
boxShadow:
|
|
69
|
+
transition: "all 0.2s ease",
|
|
70
|
+
"&:hover": {
|
|
71
|
+
transform: "translateY(-1px)",
|
|
72
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
72
73
|
},
|
|
73
74
|
}}
|
|
74
75
|
>
|
|
@@ -1,17 +1,5 @@
|
|
|
1
|
+
// Tailwind v4 uses CSS-first configuration.
|
|
2
|
+
// Custom theme values are defined in src/app/globals.css via @theme.
|
|
3
|
+
// This file is kept as an empty config for compatibility.
|
|
1
4
|
/** @type {import('tailwindcss').Config} */
|
|
2
|
-
module.exports = {
|
|
3
|
-
content: [
|
|
4
|
-
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
|
5
|
-
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
|
6
|
-
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
|
7
|
-
],
|
|
8
|
-
theme: {
|
|
9
|
-
extend: {
|
|
10
|
-
colors: {
|
|
11
|
-
'sei-red': '#9E1F19',
|
|
12
|
-
'sei-dark': '#1a1a1a',
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
plugins: [],
|
|
17
|
-
}
|
|
5
|
+
module.exports = {};
|