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.
Files changed (59) hide show
  1. package/dist/cli.js +31 -5
  2. package/dist/cli.js.map +1 -1
  3. package/package.json +11 -2
  4. package/src/main.ts +11 -2
  5. package/src/tasks/config-to-sepolia.ts +25 -0
  6. package/src/tasks/copy-template-files.ts +7 -4
  7. package/src/tasks/index.ts +1 -0
  8. package/src/utils/prompt-for-missing-options.ts +1 -1
  9. package/templates/base/package.json +10 -1
  10. package/templates/base/packages/nextjs/app/debug/_components/DebugContracts.tsx +15 -5
  11. package/templates/base/packages/nextjs/app/debug/_components/contract/ContractInput.tsx +3 -3
  12. package/templates/base/packages/nextjs/app/debug/_components/contract/ContractUI.tsx +104 -28
  13. package/templates/base/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx +15 -2
  14. package/templates/base/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx +11 -4
  15. package/templates/base/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx +37 -21
  16. package/templates/base/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx +26 -20
  17. package/templates/base/packages/nextjs/app/layout.tsx +10 -4
  18. package/templates/base/packages/nextjs/components/AngularBorder.tsx +41 -0
  19. package/templates/base/packages/nextjs/components/Footer.tsx +153 -44
  20. package/templates/base/packages/nextjs/components/Header.tsx +73 -10
  21. package/templates/base/packages/nextjs/components/SwitchTheme.tsx +34 -3
  22. package/templates/base/packages/nextjs/components/scaffold-eth/Faucet.tsx +40 -5
  23. package/templates/base/packages/nextjs/components/scaffold-eth/Input/AddressInput.tsx +1 -9
  24. package/templates/base/packages/nextjs/components/scaffold-eth/Input/InputBase.tsx +1 -1
  25. package/templates/base/packages/nextjs/components/scaffold-eth/Input/IntegerInput.tsx +35 -25
  26. package/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/AddressInfoDropdown.tsx +138 -24
  27. package/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/RevealBurnerPKModal.tsx +59 -0
  28. package/templates/base/packages/nextjs/components/scaffold-eth/RainbowKitCustomConnectButton/index.tsx +2 -0
  29. package/templates/base/packages/nextjs/contracts/deployedContracts.ts +117 -1
  30. package/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldEventHistory.ts +107 -28
  31. package/templates/base/packages/nextjs/hooks/scaffold-eth/useScaffoldWriteContract.ts +5 -1
  32. package/templates/base/packages/nextjs/hooks/scaffold-eth/useTransactor.tsx +7 -5
  33. package/templates/base/packages/nextjs/icons/EthIcon.tsx +28 -0
  34. package/templates/base/packages/nextjs/icons/LightBugAntIcon.tsx +7 -7
  35. package/templates/base/packages/nextjs/package.json +13 -5
  36. package/templates/base/packages/nextjs/public/logo.svg +20 -7
  37. package/templates/base/packages/nextjs/services/web3/wagmiConnectors.tsx +1 -0
  38. package/templates/base/packages/nextjs/styles/globals.css +339 -2
  39. package/templates/base/packages/nextjs/tailwind.config.js +2 -1
  40. package/templates/base/packages/nextjs/utils/scaffold-eth/contract.ts +74 -2
  41. package/templates/base/packages/nextjs/utils/scaffold-stylus/supportedChains.ts +1 -1
  42. package/templates/base/packages/stylus/package.json +9 -0
  43. package/templates/base/packages/stylus/scripts/deploy.ts +0 -8
  44. package/templates/base/packages/stylus/scripts/deploy_contract.ts +1 -0
  45. package/templates/base/packages/stylus/scripts/test_network.ts +6 -7
  46. package/templates/base/packages/stylus/scripts/utils/contract.ts +6 -2
  47. package/templates/base/packages/stylus/scripts/utils/deployment.ts +1 -0
  48. package/templates/base/packages/stylus/scripts/utils/network.ts +23 -5
  49. package/templates/base/packages/stylus/your-contract/Cargo.lock +4 -4
  50. package/templates/base/packages/stylus/your-contract/Cargo.toml +1 -1
  51. package/templates/base/packages/stylus/your-contract/src/lib.rs +3 -7
  52. package/templates/base/readme.md +55 -169
  53. package/templates/base/yarn.lock +1058 -1128
  54. package/templates/base/packages/stylus/counter/.cargo/config.toml +0 -18
  55. package/templates/base/packages/stylus/counter/Cargo.lock +0 -5788
  56. package/templates/base/packages/stylus/counter/Cargo.toml +0 -46
  57. package/templates/base/packages/stylus/counter/rust-toolchain.toml +0 -2
  58. package/templates/base/packages/stylus/counter/src/lib.rs +0 -121
  59. package/templates/base/packages/stylus/counter/src/main.rs +0 -10
@@ -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 className="bg-secondary rounded-3xl text-sm px-4 py-1.5 break-words overflow-auto">
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="btn btn-secondary btn-sm self-end md:self-start"
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 className="flex text-sm rounded-3xl peer-checked:rounded-b-none min-h-0 bg-secondary py-0">
13
- <div className="mt-1 pl-2">
14
- {isTxResultCopiedToClipboard ? (
15
- <CheckCircleIcon
16
- className="ml-1.5 text-xl font-normal text-base-content h-5 w-5 cursor-pointer"
17
- aria-hidden="true"
18
- />
19
- ) : (
20
- <DocumentDuplicateIcon
21
- className="ml-1.5 text-xl font-normal h-5 w-5 cursor-pointer"
22
- aria-hidden="true"
23
- onClick={() => copyTxResultToClipboard(JSON.stringify(txResult, replacer, 2))}
24
- />
25
- )}
26
- </div>
27
- <div tabIndex={0} className="flex-wrap collapse collapse-arrow">
28
- <input type="checkbox" className="min-h-0! peer" />
29
- <div className="collapse-title text-sm min-h-0! py-1.5 pl-1 after:top-4!">
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="collapse-content overflow-auto bg-secondary rounded-t-none rounded-3xl pl-0!">
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
- </div>
55
+ )}
40
56
  </div>
41
57
  );
42
58
  };
@@ -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({ wagmiConfig, writeContractParams: writeContractObj });
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
- // TODO use `useMemo` to optimize also update in ReadOnlyFunctionForm
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 justify-between gap-2">
123
+ <div className="flex flex-col gap-2">
120
124
  {!zeroInputs && (
121
- <div className="grow basis-0">{displayedTxResult ? <TxReceipt txResult={displayedTxResult} /> : null}</div>
125
+ <div className="w-full">{displayedTxResult ? <TxReceipt txResult={displayedTxResult} /> : null}</div>
122
126
  )}
123
- <div
124
- className={`flex ${
125
- writeDisabled &&
126
- "tooltip tooltip-bottom tooltip-secondary before:content-[attr(data-tip)] before:-translate-x-1/3 before:left-auto before:transform-none"
127
- }`}
128
- data-tip={`${writeDisabled && "Wallet not connected or in the wrong network"}`}
129
- >
130
- <button className="btn btn-secondary btn-sm" disabled={writeDisabled || isPending} onClick={handleWrite}>
131
- {isPending && <span className="loading loading-spinner loading-xs"></span>}
132
- Send 💸
133
- </button>
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="grow basis-0">
144
+ <div className="w-full">
139
145
  <TxReceipt txResult={txResult} />
140
146
  </div>
141
147
  ) : null}
@@ -1,13 +1,19 @@
1
- import { DM_Sans } from "next/font/google";
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 dmSans = DM_Sans({
8
+ const inter = Inter({
9
9
  subsets: ["latin"],
10
- variable: "--font-dm-sans",
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={`${dmSans.variable} font-sans`} suppressHydrationWarning>
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 { CurrencyDollarIcon, MagnifyingGlassIcon } from "@heroicons/react/24/outline";
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
- <div className="btn btn-sm font-normal gap-1 cursor-auto border-round-color bg-base-100">
38
- <CurrencyDollarIcon className="h-4 w-4 stroke-[#E3066E]" />
39
- <span>{nativeCurrencyPrice.toFixed(2)}</span>
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
- <Link
47
- href="/blockexplorer"
48
- passHref
49
- className="btn btn-sm font-normal gap-1 border-round-color bg-base-100"
50
- >
51
- <MagnifyingGlassIcon className="h-4 w-4 stroke-[#E3066E]" />
52
- <span>Block Explorer</span>
53
- </Link>
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
- <ul className="menu menu-horizontal w-full">
61
- <div className="flex justify-center items-center gap-2 text-sm w-full">
62
- <div className="text-center">
63
- <a href="https://github.com/Arb-Stylus/scaffold-stylus" target="_blank" rel="noreferrer" className="link">
64
- Fork me
65
- </a>
66
- </div>
67
- <span>·</span>
68
- {/*<div className="flex justify-center items-center gap-2">
69
- <p className="m-0 text-center">
70
- Built with <HeartIcon className="inline-block h-4 w-4" /> at
71
- </p>
72
- <a
73
- className="flex justify-center items-center gap-1"
74
- href="https://buidlguidl.com/"
75
- target="_blank"
76
- rel="noreferrer"
77
- >
78
- <BuidlGuidlLogo className="w-3 h-5 pb-1" />
79
- <span className="link">BuidlGuidl</span>
80
- </a>
81
- </div>
82
- <span>·</span>*/}
83
- <div className="text-center">
84
- <a href="https://t.me/joinchat/KByvmRe5wkR-8F_zz6AjpA" target="_blank" rel="noreferrer" className="link">
85
- Support
86
- </a>
87
- </div>
88
- </div>
89
- </ul>
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
  );