create-stylus 0.1.4 → 0.1.6
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/dist/cli.js +31 -5
- package/dist/cli.js.map +1 -1
- package/package.json +11 -2
- package/src/main.ts +11 -2
- package/src/tasks/config-to-sepolia.ts +25 -0
- package/src/tasks/copy-template-files.ts +7 -4
- package/src/tasks/index.ts +1 -0
- package/src/utils/prompt-for-missing-options.ts +1 -1
- package/templates/base/package.json +10 -1
- package/templates/base/packages/nextjs/app/debug/_components/DebugContracts.tsx +15 -5
- package/templates/base/packages/nextjs/app/debug/_components/contract/ContractInput.tsx +3 -3
- package/templates/base/packages/nextjs/app/debug/_components/contract/ContractUI.tsx +104 -28
- package/templates/base/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx +15 -2
- package/templates/base/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx +11 -4
- package/templates/base/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx +37 -21
- package/templates/base/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx +26 -20
- package/templates/base/packages/nextjs/app/layout.tsx +10 -4
- package/templates/base/packages/nextjs/components/AngularBorder.tsx +41 -0
- package/templates/base/packages/nextjs/components/Footer.tsx +153 -44
- package/templates/base/packages/nextjs/components/Header.tsx +73 -10
- package/templates/base/packages/nextjs/components/SwitchTheme.tsx +34 -3
- package/templates/base/packages/nextjs/components/scaffold-eth/Faucet.tsx +40 -5
- package/templates/base/packages/nextjs/components/scaffold-eth/Input/AddressInput.tsx +1 -9
- package/templates/base/packages/nextjs/components/scaffold-eth/Input/InputBase.tsx +1 -1
- package/templates/base/packages/nextjs/components/scaffold-eth/Input/IntegerInput.tsx +35 -25
- package/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx +138 -24
- package/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/RevealBurnerPKModal.tsx +59 -0
- package/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/index.tsx +2 -0
- package/templates/base/packages/nextjs/contracts/deployedContracts.ts +117 -1
- package/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldEventHistory.ts +107 -28
- package/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldWriteContract.ts +5 -1
- package/templates/base/packages/nextjs/hooks/scaffold-eth/useTransactor.tsx +7 -5
- package/templates/base/packages/nextjs/icons/EthIcon.tsx +28 -0
- package/templates/base/packages/nextjs/icons/LightBugAntIcon.tsx +7 -7
- package/templates/base/packages/nextjs/package.json +13 -5
- package/templates/base/packages/nextjs/public/logo.svg +20 -7
- package/templates/base/packages/nextjs/services/web3/wagmiConnectors.tsx +1 -0
- package/templates/base/packages/nextjs/styles/globals.css +339 -2
- package/templates/base/packages/nextjs/tailwind.config.js +2 -1
- package/templates/base/packages/nextjs/utils/scaffold-eth/contract.ts +74 -2
- package/templates/base/packages/nextjs/utils/scaffold-stylus/supportedChains.ts +1 -1
- package/templates/base/packages/stylus/package.json +9 -0
- package/templates/base/packages/stylus/scripts/deploy.ts +0 -8
- package/templates/base/packages/stylus/scripts/deploy_contract.ts +1 -0
- package/templates/base/packages/stylus/scripts/test_network.ts +6 -7
- package/templates/base/packages/stylus/scripts/utils/contract.ts +6 -2
- package/templates/base/packages/stylus/scripts/utils/deployment.ts +1 -0
- package/templates/base/packages/stylus/scripts/utils/network.ts +23 -5
- package/templates/base/packages/stylus/your-contract/Cargo.lock +4 -4
- package/templates/base/packages/stylus/your-contract/Cargo.toml +1 -1
- package/templates/base/packages/stylus/your-contract/src/lib.rs +3 -7
- package/templates/base/readme.md +55 -169
- package/templates/base/yarn.lock +1058 -1128
- package/templates/base/packages/stylus/counter/.cargo/config.toml +0 -18
- package/templates/base/packages/stylus/counter/Cargo.lock +0 -5788
- package/templates/base/packages/stylus/counter/Cargo.toml +0 -46
- package/templates/base/packages/stylus/counter/rust-toolchain.toml +0 -2
- package/templates/base/packages/stylus/counter/src/lib.rs +0 -121
- package/templates/base/packages/stylus/counter/src/main.rs +0 -10
package/templates/base/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx
CHANGED
|
@@ -71,7 +71,7 @@ export const ReadOnlyFunctionForm = ({
|
|
|
71
71
|
|
|
72
72
|
return (
|
|
73
73
|
<div className="flex flex-col gap-3 py-5 first:pt-0 last:pb-1">
|
|
74
|
-
<p className="font-medium my-0 break-words">
|
|
74
|
+
<p className="font-medium my-0 break-words function-name">
|
|
75
75
|
{abiFunction.name}
|
|
76
76
|
<InheritanceTooltip inheritedFrom={inheritedFrom} />
|
|
77
77
|
</p>
|
|
@@ -79,14 +79,21 @@ export const ReadOnlyFunctionForm = ({
|
|
|
79
79
|
<div className="flex flex-col md:flex-row justify-between gap-2 flex-wrap">
|
|
80
80
|
<div className="grow w-full md:max-w-[80%]">
|
|
81
81
|
{result !== null && result !== undefined && (
|
|
82
|
-
<div
|
|
82
|
+
<div
|
|
83
|
+
className="rounded-lg text-sm px-4 py-1.5 break-words overflow-auto"
|
|
84
|
+
style={{
|
|
85
|
+
background: "var(--bg-surface-input-20, rgba(255, 255, 255, 0.04))",
|
|
86
|
+
backdropFilter: "blur(25px)",
|
|
87
|
+
border: "none",
|
|
88
|
+
}}
|
|
89
|
+
>
|
|
83
90
|
<p className="font-bold m-0 mb-1">Result:</p>
|
|
84
91
|
<pre className="whitespace-pre-wrap break-words">{displayTxResult(result, "sm")}</pre>
|
|
85
92
|
</div>
|
|
86
93
|
)}
|
|
87
94
|
</div>
|
|
88
95
|
<button
|
|
89
|
-
className="
|
|
96
|
+
className="read-button"
|
|
90
97
|
onClick={async () => {
|
|
91
98
|
const { data } = await refetch();
|
|
92
99
|
setResult(data);
|
|
@@ -94,7 +101,7 @@ export const ReadOnlyFunctionForm = ({
|
|
|
94
101
|
disabled={isFetching}
|
|
95
102
|
>
|
|
96
103
|
{isFetching && <span className="loading loading-spinner loading-xs"></span>}
|
|
97
|
-
Read
|
|
104
|
+
Read
|
|
98
105
|
</button>
|
|
99
106
|
</div>
|
|
100
107
|
</div>
|
|
@@ -1,42 +1,58 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
1
2
|
import { TransactionReceipt } from "viem";
|
|
2
|
-
import { CheckCircleIcon, DocumentDuplicateIcon } from "@heroicons/react/24/outline";
|
|
3
|
+
import { CheckCircleIcon, DocumentDuplicateIcon, ChevronUpIcon, ChevronDownIcon } from "@heroicons/react/24/outline";
|
|
3
4
|
import { ObjectFieldDisplay } from "~~/app/debug/_components/contract";
|
|
4
5
|
import { useCopyToClipboard } from "~~/hooks/scaffold-eth/useCopyToClipboard";
|
|
5
6
|
import { replacer } from "~~/utils/scaffold-eth/common";
|
|
6
7
|
|
|
7
8
|
export const TxReceipt = ({ txResult }: { txResult: TransactionReceipt }) => {
|
|
9
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
8
10
|
const { copyToClipboard: copyTxResultToClipboard, isCopiedToClipboard: isTxResultCopiedToClipboard } =
|
|
9
11
|
useCopyToClipboard();
|
|
10
12
|
|
|
11
13
|
return (
|
|
12
|
-
<div
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
14
|
+
<div
|
|
15
|
+
className="text-sm rounded-lg min-h-0 p-4"
|
|
16
|
+
style={{
|
|
17
|
+
background: "var(--bg-surface-input-20, rgba(255, 255, 255, 0.04))",
|
|
18
|
+
backdropFilter: "blur(25px)",
|
|
19
|
+
border: "none",
|
|
20
|
+
}}
|
|
21
|
+
>
|
|
22
|
+
{/* Fixed Header */}
|
|
23
|
+
<div className="flex items-center">
|
|
24
|
+
<div className="flex items-center">
|
|
25
|
+
{isTxResultCopiedToClipboard ? (
|
|
26
|
+
<CheckCircleIcon
|
|
27
|
+
className="text-xl font-normal text-base-content h-5 w-5 cursor-pointer"
|
|
28
|
+
aria-hidden="true"
|
|
29
|
+
/>
|
|
30
|
+
) : (
|
|
31
|
+
<DocumentDuplicateIcon
|
|
32
|
+
className="text-xl font-normal h-5 w-5 cursor-pointer"
|
|
33
|
+
aria-hidden="true"
|
|
34
|
+
onClick={() => copyTxResultToClipboard(JSON.stringify(txResult, replacer, 2))}
|
|
35
|
+
/>
|
|
36
|
+
)}
|
|
37
|
+
</div>
|
|
38
|
+
<div className="flex-1 flex items-center pl-2">
|
|
30
39
|
<strong>Transaction Receipt</strong>
|
|
31
40
|
</div>
|
|
32
|
-
<div className="
|
|
41
|
+
<div className="cursor-pointer" onClick={() => setIsExpanded(!isExpanded)}>
|
|
42
|
+
{isExpanded ? <ChevronUpIcon className="h-5 w-5" /> : <ChevronDownIcon className="h-5 w-5" />}
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
{/* Collapsible Content */}
|
|
47
|
+
{isExpanded && (
|
|
48
|
+
<div className="overflow-auto rounded-t-none mt-2">
|
|
33
49
|
<pre className="text-xs">
|
|
34
50
|
{Object.entries(txResult).map(([k, v]) => (
|
|
35
51
|
<ObjectFieldDisplay name={k} value={v} size="xs" leftPad={false} key={k} />
|
|
36
52
|
))}
|
|
37
53
|
</pre>
|
|
38
54
|
</div>
|
|
39
|
-
|
|
55
|
+
)}
|
|
40
56
|
</div>
|
|
41
57
|
);
|
|
42
58
|
};
|
package/templates/base/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
3
|
+
import { useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { InheritanceTooltip } from "./InheritanceTooltip";
|
|
5
5
|
import { Abi, AbiFunction } from "abitype";
|
|
6
6
|
import { Address, TransactionReceipt } from "viem";
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
import { IntegerInput } from "~~/components/scaffold-eth";
|
|
17
17
|
import { useTransactor } from "~~/hooks/scaffold-eth";
|
|
18
18
|
import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork";
|
|
19
|
+
import { AllowedChainIds } from "~~/utils/scaffold-stylus";
|
|
19
20
|
import { simulateContractWriteAndNotifyError } from "~~/utils/scaffold-eth/contract";
|
|
20
21
|
|
|
21
22
|
type WriteOnlyFunctionFormProps = {
|
|
@@ -54,7 +55,11 @@ export const WriteOnlyFunctionForm = ({
|
|
|
54
55
|
args: getParsedContractFunctionArgs(form),
|
|
55
56
|
value: BigInt(txValue),
|
|
56
57
|
};
|
|
57
|
-
await simulateContractWriteAndNotifyError({
|
|
58
|
+
await simulateContractWriteAndNotifyError({
|
|
59
|
+
wagmiConfig,
|
|
60
|
+
writeContractParams: writeContractObj,
|
|
61
|
+
chainId: targetNetwork.id as AllowedChainIds,
|
|
62
|
+
});
|
|
58
63
|
|
|
59
64
|
const makeWriteWithParams = () => writeContractAsync(writeContractObj);
|
|
60
65
|
await writeTxn(makeWriteWithParams);
|
|
@@ -73,8 +78,7 @@ export const WriteOnlyFunctionForm = ({
|
|
|
73
78
|
setDisplayedTxResult(txResult);
|
|
74
79
|
}, [txResult]);
|
|
75
80
|
|
|
76
|
-
|
|
77
|
-
const transformedFunction = transformAbiFunction(abiFunction);
|
|
81
|
+
const transformedFunction = useMemo(() => transformAbiFunction(abiFunction), [abiFunction]);
|
|
78
82
|
const inputs = transformedFunction.inputs.map((input, inputIndex) => {
|
|
79
83
|
const key = getFunctionInputKey(abiFunction.name, input, inputIndex);
|
|
80
84
|
return (
|
|
@@ -95,7 +99,7 @@ export const WriteOnlyFunctionForm = ({
|
|
|
95
99
|
return (
|
|
96
100
|
<div className="py-5 space-y-3 first:pt-0 last:pb-1">
|
|
97
101
|
<div className={`flex gap-3 ${zeroInputs ? "flex-row justify-between items-center" : "flex-col"}`}>
|
|
98
|
-
<p className="font-medium my-0 break-words">
|
|
102
|
+
<p className="font-medium my-0 break-words function-name">
|
|
99
103
|
{abiFunction.name}
|
|
100
104
|
<InheritanceTooltip inheritedFrom={inheritedFrom} />
|
|
101
105
|
</p>
|
|
@@ -104,7 +108,7 @@ export const WriteOnlyFunctionForm = ({
|
|
|
104
108
|
<div className="flex flex-col gap-1.5 w-full">
|
|
105
109
|
<div className="flex items-center ml-2">
|
|
106
110
|
<span className="text-xs font-medium mr-2 leading-none">payable value</span>
|
|
107
|
-
<span className="block text-xs font-extralight leading-none">wei</span>
|
|
111
|
+
<span className="block text-xs font-extralight leading-none param-type">wei</span>
|
|
108
112
|
</div>
|
|
109
113
|
<IntegerInput
|
|
110
114
|
value={txValue}
|
|
@@ -116,26 +120,28 @@ export const WriteOnlyFunctionForm = ({
|
|
|
116
120
|
/>
|
|
117
121
|
</div>
|
|
118
122
|
) : null}
|
|
119
|
-
<div className="flex
|
|
123
|
+
<div className="flex flex-col gap-2">
|
|
120
124
|
{!zeroInputs && (
|
|
121
|
-
<div className="
|
|
125
|
+
<div className="w-full">{displayedTxResult ? <TxReceipt txResult={displayedTxResult} /> : null}</div>
|
|
122
126
|
)}
|
|
123
|
-
<div
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
127
|
+
<div className="flex justify-end">
|
|
128
|
+
<div
|
|
129
|
+
className={`flex ${
|
|
130
|
+
writeDisabled &&
|
|
131
|
+
"tooltip tooltip-bottom tooltip-secondary before:content-[attr(data-tip)] before:-translate-x-1/3 before:left-auto before:transform-none"
|
|
132
|
+
}`}
|
|
133
|
+
data-tip={`${writeDisabled && "Wallet not connected or in the wrong network"}`}
|
|
134
|
+
>
|
|
135
|
+
<button className="send-button" disabled={writeDisabled || isPending} onClick={handleWrite}>
|
|
136
|
+
{isPending && <span className="loading loading-spinner loading-xs"></span>}
|
|
137
|
+
Send
|
|
138
|
+
</button>
|
|
139
|
+
</div>
|
|
134
140
|
</div>
|
|
135
141
|
</div>
|
|
136
142
|
</div>
|
|
137
143
|
{zeroInputs && txResult ? (
|
|
138
|
-
<div className="
|
|
144
|
+
<div className="w-full">
|
|
139
145
|
<TxReceipt txResult={txResult} />
|
|
140
146
|
</div>
|
|
141
147
|
) : null}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Inter, Orbitron } from "next/font/google";
|
|
2
2
|
import "@rainbow-me/rainbowkit/styles.css";
|
|
3
3
|
import { Metadata } from "next";
|
|
4
4
|
import { ScaffoldEthAppWithProviders } from "~~/components/ScaffoldEthAppWithProviders";
|
|
5
5
|
import { ThemeProvider } from "~~/components/ThemeProvider";
|
|
6
6
|
import "~~/styles/globals.css";
|
|
7
7
|
|
|
8
|
-
const
|
|
8
|
+
const inter = Inter({
|
|
9
9
|
subsets: ["latin"],
|
|
10
|
-
variable: "--font-
|
|
10
|
+
variable: "--font-inter",
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const orbitron = Orbitron({
|
|
14
|
+
subsets: ["latin"],
|
|
15
|
+
variable: "--font-orbitron",
|
|
16
|
+
weight: ["400", "700", "900"],
|
|
11
17
|
});
|
|
12
18
|
|
|
13
19
|
const baseUrl = process.env.VERCEL_URL
|
|
@@ -55,7 +61,7 @@ export const metadata: Metadata = {
|
|
|
55
61
|
const ScaffoldEthApp = ({ children }: { children: React.ReactNode }) => {
|
|
56
62
|
return (
|
|
57
63
|
<html suppressHydrationWarning>
|
|
58
|
-
<body className={`${
|
|
64
|
+
<body className={`${inter.variable} ${orbitron.variable} font-sans`} suppressHydrationWarning>
|
|
59
65
|
<ThemeProvider>
|
|
60
66
|
<ScaffoldEthAppWithProviders>{children}</ScaffoldEthAppWithProviders>
|
|
61
67
|
</ThemeProvider>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
interface AngularBorderProps {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
color?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const AngularBorder: React.FC<AngularBorderProps> = ({
|
|
12
|
+
width,
|
|
13
|
+
height,
|
|
14
|
+
color = "#FD0077",
|
|
15
|
+
className = "",
|
|
16
|
+
style = {},
|
|
17
|
+
}) => {
|
|
18
|
+
return (
|
|
19
|
+
<svg
|
|
20
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
21
|
+
width={width}
|
|
22
|
+
height={height}
|
|
23
|
+
viewBox={`0 0 ${width} ${height}`}
|
|
24
|
+
fill="none"
|
|
25
|
+
className={className}
|
|
26
|
+
style={{
|
|
27
|
+
position: "absolute",
|
|
28
|
+
top: "-3px",
|
|
29
|
+
left: 0,
|
|
30
|
+
pointerEvents: "none",
|
|
31
|
+
...style,
|
|
32
|
+
}}
|
|
33
|
+
>
|
|
34
|
+
<path
|
|
35
|
+
d={`M${width - 20}.132 0.5L${width - 1}.5 ${height / 2}.2109V${height - 1}.5H19.0811L0.5 ${height / 2}.7871V0.5H${width - 20}.132Z`}
|
|
36
|
+
stroke={color}
|
|
37
|
+
strokeWidth="1"
|
|
38
|
+
/>
|
|
39
|
+
</svg>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
import Link from "next/link";
|
|
3
3
|
import { useTheme } from "next-themes";
|
|
4
|
-
import {
|
|
4
|
+
import { MagnifyingGlassIcon } from "@heroicons/react/24/outline";
|
|
5
5
|
//import { HeartIcon } from "@heroicons/react/24/outline";
|
|
6
6
|
//import { BuidlGuidlLogo } from "~~/components/assets/BuidlGuidlLogo";
|
|
7
|
+
import { AngularBorder } from "~~/components/AngularBorder";
|
|
7
8
|
import { Faucet } from "~~/components/scaffold-eth";
|
|
8
9
|
import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork";
|
|
9
10
|
import { useGlobalState } from "~~/services/store/store";
|
|
10
11
|
import { arbitrumNitro } from "~~/utils/scaffold-stylus/supportedChains";
|
|
12
|
+
import EthIcon from "~~/icons/EthIcon";
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Site footer
|
|
@@ -33,60 +35,167 @@ export const Footer = () => {
|
|
|
33
35
|
<div className="fixed flex justify-between items-center w-full z-10 p-4 bottom-0 left-0 pointer-events-none">
|
|
34
36
|
<div className="flex flex-col md:flex-row gap-2 pointer-events-auto">
|
|
35
37
|
{nativeCurrencyPrice > 0 && (
|
|
36
|
-
<div>
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
<div className="relative">
|
|
39
|
+
<AngularBorder width={140} height={40} color="rgba(227, 6, 110, 1)" />
|
|
40
|
+
<div
|
|
41
|
+
className="flex items-center gap-2 px-6 cursor-auto rounded-lg"
|
|
42
|
+
style={{
|
|
43
|
+
width: "140px",
|
|
44
|
+
height: "40px",
|
|
45
|
+
display: "flex",
|
|
46
|
+
alignItems: "flex-start",
|
|
47
|
+
paddingTop: "6px",
|
|
48
|
+
position: "relative",
|
|
49
|
+
zIndex: 1,
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
<EthIcon width={20} height={20} />
|
|
53
|
+
<span
|
|
54
|
+
style={{
|
|
55
|
+
fontFamily: "Orbitron, sans-serif",
|
|
56
|
+
fontSize: "13px",
|
|
57
|
+
fontWeight: 700,
|
|
58
|
+
textTransform: "uppercase",
|
|
59
|
+
whiteSpace: "nowrap",
|
|
60
|
+
overflow: "hidden",
|
|
61
|
+
textOverflow: "ellipsis",
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
{nativeCurrencyPrice.toFixed(2)}
|
|
65
|
+
</span>
|
|
40
66
|
</div>
|
|
41
67
|
</div>
|
|
42
68
|
)}
|
|
43
69
|
{isLocalNetwork && (
|
|
44
70
|
<>
|
|
45
71
|
<Faucet />
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
72
|
+
<div className="relative">
|
|
73
|
+
<AngularBorder width={210} height={40} color="rgba(227, 6, 110, 1)" />
|
|
74
|
+
<Link
|
|
75
|
+
href="/blockexplorer"
|
|
76
|
+
passHref
|
|
77
|
+
className="flex items-center gap-2 px-4 py-2 rounded-lg"
|
|
78
|
+
style={{
|
|
79
|
+
width: "210px",
|
|
80
|
+
height: "40px",
|
|
81
|
+
display: "flex",
|
|
82
|
+
alignItems: "flex-start",
|
|
83
|
+
paddingTop: "8px",
|
|
84
|
+
position: "relative",
|
|
85
|
+
zIndex: 1,
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
<MagnifyingGlassIcon className="h-4 w-4" style={{ color: "rgba(227, 6, 110, 1)" }} />
|
|
89
|
+
<span
|
|
90
|
+
style={{
|
|
91
|
+
color: isDarkMode ? "#FFF" : "black",
|
|
92
|
+
fontFamily: "Orbitron, sans-serif",
|
|
93
|
+
fontSize: "14px",
|
|
94
|
+
fontWeight: 700,
|
|
95
|
+
textTransform: "uppercase",
|
|
96
|
+
whiteSpace: "nowrap",
|
|
97
|
+
overflow: "hidden",
|
|
98
|
+
textOverflow: "ellipsis",
|
|
99
|
+
}}
|
|
100
|
+
>
|
|
101
|
+
Block Explorer
|
|
102
|
+
</span>
|
|
103
|
+
</Link>
|
|
104
|
+
</div>
|
|
54
105
|
</>
|
|
55
106
|
)}
|
|
56
107
|
</div>
|
|
57
108
|
</div>
|
|
58
109
|
</div>
|
|
59
|
-
<div className="w-full">
|
|
60
|
-
<
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
110
|
+
<div className="w-full flex justify-end">
|
|
111
|
+
<div className="flex gap-2">
|
|
112
|
+
{/* Fork me button */}
|
|
113
|
+
<a
|
|
114
|
+
href="https://github.com/Arb-Stylus/scaffold-stylus"
|
|
115
|
+
target="_blank"
|
|
116
|
+
rel="noreferrer"
|
|
117
|
+
className="flex items-center gap-2 px-4 py-2 rounded-2xl border"
|
|
118
|
+
style={{
|
|
119
|
+
width: "120px",
|
|
120
|
+
height: "32px",
|
|
121
|
+
display: "flex",
|
|
122
|
+
alignItems: "center",
|
|
123
|
+
justifyContent: "center",
|
|
124
|
+
borderColor: isDarkMode ? "#353535" : "rgba(0, 0, 0, 0.1)",
|
|
125
|
+
backgroundColor: isDarkMode ? "transparent" : "rgba(0, 0, 0, 0.04)",
|
|
126
|
+
}}
|
|
127
|
+
>
|
|
128
|
+
<svg
|
|
129
|
+
width="16"
|
|
130
|
+
height="16"
|
|
131
|
+
viewBox="0 0 24 24"
|
|
132
|
+
fill="none"
|
|
133
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
134
|
+
style={{ color: isDarkMode ? "#FFF" : "rgba(227, 6, 110, 1)" }}
|
|
135
|
+
>
|
|
136
|
+
<path
|
|
137
|
+
d="M12 0C5.374 0 0 5.373 0 12 0 17.302 3.438 21.8 8.207 23.387c.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0112 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"
|
|
138
|
+
fill="currentColor"
|
|
139
|
+
/>
|
|
140
|
+
</svg>
|
|
141
|
+
<span
|
|
142
|
+
style={{
|
|
143
|
+
color: isDarkMode ? "#FFF" : "black",
|
|
144
|
+
fontFamily: "Inter, sans-serif",
|
|
145
|
+
fontSize: "12px",
|
|
146
|
+
fontWeight: 500,
|
|
147
|
+
textTransform: "uppercase",
|
|
148
|
+
whiteSpace: "nowrap",
|
|
149
|
+
}}
|
|
150
|
+
>
|
|
151
|
+
Fork me
|
|
152
|
+
</span>
|
|
153
|
+
</a>
|
|
154
|
+
|
|
155
|
+
{/* Support button */}
|
|
156
|
+
<a
|
|
157
|
+
href="https://t.me/arbitrum_stylus"
|
|
158
|
+
target="_blank"
|
|
159
|
+
rel="noreferrer"
|
|
160
|
+
className="flex items-center gap-2 px-4 py-2 rounded-2xl border"
|
|
161
|
+
style={{
|
|
162
|
+
width: "120px",
|
|
163
|
+
height: "32px",
|
|
164
|
+
display: "flex",
|
|
165
|
+
alignItems: "center",
|
|
166
|
+
justifyContent: "center",
|
|
167
|
+
borderColor: isDarkMode ? "#353535" : "rgba(0, 0, 0, 0.1)",
|
|
168
|
+
backgroundColor: isDarkMode ? "transparent" : "rgba(0, 0, 0, 0.04)",
|
|
169
|
+
}}
|
|
170
|
+
>
|
|
171
|
+
<svg
|
|
172
|
+
width="18"
|
|
173
|
+
height="18"
|
|
174
|
+
viewBox="0 0 18 18"
|
|
175
|
+
fill="none"
|
|
176
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
177
|
+
style={{ color: isDarkMode ? "#FFF" : "rgba(227, 6, 110, 1)" }}
|
|
178
|
+
>
|
|
179
|
+
<path
|
|
180
|
+
d="M8.99987 0.144531C5.52104 0.144531 2.58863 2.52009 2.01657 5.68428H1.50821C0.752731 5.68428 0.144531 6.2925 0.144531 7.048V10.9528C0.144531 11.7083 0.752731 12.3165 1.50821 12.3165H2.16195C2.91743 12.3165 3.52563 11.7083 3.52563 10.9528V6.8144C3.52563 4.02827 5.92511 1.75454 9.0005 1.75454C12.076 1.75454 14.4754 4.02827 14.4754 6.8144V11.1864C14.4754 13.9725 12.076 16.2454 9.0005 16.2454C8.55585 16.2454 8.19544 16.606 8.19551 17.0506C8.19556 17.4952 8.55592 17.8556 9.0005 17.8556C12.4794 17.8556 15.4117 15.4806 15.9838 12.3165H16.492C17.2475 12.3165 17.8556 11.7083 17.8556 10.9528V7.048C17.8556 6.2925 17.2475 5.68428 16.492 5.68428H15.9838C15.4117 2.52009 12.4794 0.144531 9.0005 0.144531H8.99987ZM7.47643 11.8637C7.02965 11.8637 6.65446 12.2387 6.80565 12.6568C7.13012 13.5546 7.98997 14.1963 8.99967 14.1963C10.0094 14.1963 10.8694 13.5546 11.1939 12.6568C11.345 12.2387 10.9699 11.8637 10.5231 11.8637H7.47643Z"
|
|
181
|
+
fill="currentColor"
|
|
182
|
+
/>
|
|
183
|
+
</svg>
|
|
184
|
+
|
|
185
|
+
<span
|
|
186
|
+
style={{
|
|
187
|
+
color: isDarkMode ? "#FFF" : "black",
|
|
188
|
+
fontFamily: "Inter, sans-serif",
|
|
189
|
+
fontSize: "12px",
|
|
190
|
+
fontWeight: 500,
|
|
191
|
+
textTransform: "uppercase",
|
|
192
|
+
whiteSpace: "nowrap",
|
|
193
|
+
}}
|
|
194
|
+
>
|
|
195
|
+
Support
|
|
196
|
+
</span>
|
|
197
|
+
</a>
|
|
198
|
+
</div>
|
|
90
199
|
</div>
|
|
91
200
|
</div>
|
|
92
201
|
);
|