diff --git a/.storybook/main.ts b/.storybook/main.ts
index 26dd2ee..ea31a46 100644
--- a/.storybook/main.ts
+++ b/.storybook/main.ts
@@ -1,6 +1,5 @@
-import type { StorybookConfig } from "@storybook/react-vite";
-
import { dirname, join } from "node:path";
+import type { StorybookConfig } from "@storybook/react-vite";
/**
* This function is used to resolve the absolute path of a package.
diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx
index fda22e2..6a73ace 100644
--- a/.storybook/preview.tsx
+++ b/.storybook/preview.tsx
@@ -1,6 +1,7 @@
import { withThemeByClassName } from "@storybook/addon-themes";
import type { Preview } from "@storybook/react-vite";
import "../tailwind.css";
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React from "react";
import { ClipboardProvider } from "../components/providers/clipboard-provider";
diff --git a/biome.json b/biome.json
index 49159d3..70bff43 100644
--- a/biome.json
+++ b/biome.json
@@ -1,6 +1,12 @@
{
"files": {
- "ignore": ["**/*.gen.ts", "dist", "package.json", "storybook-static"]
+ "includes": [
+ "**",
+ "!**/*.gen.ts",
+ "!**/dist",
+ "!**/package.json",
+ "!**/storybook-static"
+ ]
},
"formatter": {
"indentStyle": "space"
@@ -15,7 +21,16 @@
},
"style": {
"noUselessElse": "off",
- "noNonNullAssertion": "off"
+ "noNonNullAssertion": "off",
+ "noParameterAssign": "error",
+ "useAsConstAssertion": "error",
+ "useDefaultParameterLast": "error",
+ "useEnumInitializers": "error",
+ "useSelfClosingElements": "error",
+ "useSingleVarDeclarator": "error",
+ "noUnusedTemplateLiteral": "error",
+ "useNumberNamespace": "error",
+ "noInferrableTypes": "error"
},
"performance": {
"noAccumulatingSpread": "error",
diff --git a/components/abi-form/array-input.tsx b/components/abi-form/array-input.tsx
index f0a2db9..a7d94ab 100644
--- a/components/abi-form/array-input.tsx
+++ b/components/abi-form/array-input.tsx
@@ -1,6 +1,6 @@
import { Plus, X } from "lucide-react";
import { useState } from "react";
-import { Debug, cn } from "../../lib/utils.js";
+import { cn, Debug } from "../../lib/utils.js";
import { Button } from "../shadcn/button.js";
import { Separator } from "../shadcn/separator.js";
import { AbiInput, type InnerProps } from "./abi-input.js";
@@ -56,26 +56,24 @@ export function ArrayInput({
Expanded
- <>
- {tab === "text" && (
-
+ )}
+ {tab === "expanded" && (
+
+
- )}
- {tab === "expanded" && (
-
- )}
- >
+
+ )}
);
}
diff --git a/components/abi-form/basic.tsx b/components/abi-form/basic.tsx
index bd8edcd..4070143 100644
--- a/components/abi-form/basic.tsx
+++ b/components/abi-form/basic.tsx
@@ -1,10 +1,8 @@
-import { useCallback, useState } from "react";
-
-import type { InnerProps } from "./abi-input.js";
-
import { parse } from "@ethui/abiparse";
+import { useCallback, useState } from "react";
import { Debug, stringify } from "../../lib/utils.js";
import { Input } from "../shadcn/input.js";
+import type { InnerProps } from "./abi-input.js";
export type BasicProps = Omit;
export function Basic({ name, defaultValue, onChange, debug }: BasicProps) {
diff --git a/components/click-to-copy.tsx b/components/click-to-copy.tsx
index 8c4eaf5..69aeeb3 100644
--- a/components/click-to-copy.tsx
+++ b/components/click-to-copy.tsx
@@ -43,6 +43,7 @@ export function ClickToCopy({ children, text, ...props }: ClickToCopyProps) {
writeText(text.toString());
};
+ // biome-ignore-start lint/a11y/noStaticElementInteractions: ignore
return (
@@ -66,4 +67,5 @@ export function ClickToCopy({ children, text, ...props }: ClickToCopyProps) {
);
+ // biome-ignore-end lint/a11y/noStaticElementInteractions: ignore
}
diff --git a/components/form.tsx b/components/form.tsx
index 88423ab..f7ec70b 100644
--- a/components/form.tsx
+++ b/components/form.tsx
@@ -1,3 +1,6 @@
+import clsx from "clsx";
+import { Check, LoaderCircle, type LucideIcon, Save } from "lucide-react";
+import { createElement } from "react";
import {
type FieldPath,
type FieldPathValue,
@@ -7,10 +10,6 @@ import {
type UseFormReturn,
useFormContext,
} from "react-hook-form";
-
-import clsx from "clsx";
-import { Check, LoaderCircle, type LucideIcon, Save } from "lucide-react";
-import { createElement } from "react";
import { cn } from "../lib/utils.js";
import { Button, type ButtonProps } from "./shadcn/button.js";
import {
diff --git a/components/shadcn/alert.tsx b/components/shadcn/alert.tsx
index 18e6e70..0b4b173 100644
--- a/components/shadcn/alert.tsx
+++ b/components/shadcn/alert.tsx
@@ -1,4 +1,4 @@
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "../../lib/utils.js";
diff --git a/components/shadcn/badge.tsx b/components/shadcn/badge.tsx
index ddbc553..3e782c9 100644
--- a/components/shadcn/badge.tsx
+++ b/components/shadcn/badge.tsx
@@ -1,4 +1,4 @@
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import type * as React from "react";
import { cn } from "../../lib/utils.js";
diff --git a/components/shadcn/button.tsx b/components/shadcn/button.tsx
index 495e89c..b0c6a2d 100644
--- a/components/shadcn/button.tsx
+++ b/components/shadcn/button.tsx
@@ -1,5 +1,5 @@
import { Slot } from "@radix-ui/react-slot";
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "../../lib/utils.js";
diff --git a/components/shadcn/label.tsx b/components/shadcn/label.tsx
index 3085259..d65b586 100644
--- a/components/shadcn/label.tsx
+++ b/components/shadcn/label.tsx
@@ -1,5 +1,5 @@
import * as LabelPrimitive from "@radix-ui/react-label";
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "../../lib/utils.js";
diff --git a/components/shadcn/sheet.tsx b/components/shadcn/sheet.tsx
index c779fdb..7f284cd 100644
--- a/components/shadcn/sheet.tsx
+++ b/components/shadcn/sheet.tsx
@@ -1,6 +1,6 @@
import * as SheetPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons";
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "../../lib/utils.js";
diff --git a/components/shadcn/sidebar.tsx b/components/shadcn/sidebar.tsx
index 6c58ef6..449a188 100644
--- a/components/shadcn/sidebar.tsx
+++ b/components/shadcn/sidebar.tsx
@@ -1,5 +1,5 @@
import { Slot } from "@radix-ui/react-slot";
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import { PanelLeft } from "lucide-react";
import * as React from "react";
@@ -62,7 +62,7 @@ function SidebarProvider({
open?: boolean;
onOpenChange?: (open: boolean) => void;
}) {
- const isMobile = allowMobile && useIsMobile();
+ const isMobile = useIsMobile() && allowMobile;
const [openMobile, setOpenMobile] = React.useState(false);
// This is the internal state of the sidebar.
@@ -79,6 +79,7 @@ function SidebarProvider({
}
// This sets the cookie to keep the sidebar state.
+ // biome-ignore lint/suspicious/noDocumentCookie: ignore
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
},
[setOpenProp, open],
diff --git a/components/shadcn/toast.tsx b/components/shadcn/toast.tsx
index 5bb6f42..25fe08a 100644
--- a/components/shadcn/toast.tsx
+++ b/components/shadcn/toast.tsx
@@ -1,6 +1,6 @@
import { Cross2Icon } from "@radix-ui/react-icons";
import * as ToastPrimitives from "@radix-ui/react-toast";
-import { type VariantProps, cva } from "class-variance-authority";
+import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "../../lib/utils.js";
const ToastProvider = ToastPrimitives.Provider;
diff --git a/components/solidity-call.tsx b/components/solidity-call.tsx
index bdf8935..53b5b98 100644
--- a/components/solidity-call.tsx
+++ b/components/solidity-call.tsx
@@ -1,7 +1,6 @@
import type { Abi, AbiFunction, Address } from "abitype";
-import { decodeFunctionData, formatUnits, parseAbi } from "viem";
-
import clsx from "clsx";
+import { decodeFunctionData, formatUnits, parseAbi } from "viem";
import { ClickToCopy } from "./click-to-copy.js";
export interface SolidityCallProps {
@@ -63,25 +62,23 @@ interface DeployProps {
function Deploy({ value, from, decimals, ArgProps }: DeployProps) {
return (
- <>
-
-
-
-
to newly deployed contract
-
- >
+
+
+
+
to newly deployed contract
+
);
}
diff --git a/package.json b/package.json
index f2ec980..e23a4f0 100644
--- a/package.json
+++ b/package.json
@@ -71,7 +71,7 @@
"tailwindcss-animate": "^1.0"
},
"devDependencies": {
- "@biomejs/biome": "^1.9.4",
+ "@biomejs/biome": "^2.0.6",
"@chromatic-com/storybook": "^4.0.0-next.16",
"@storybook/addon-docs": "^9.0.4",
"@storybook/addon-links": "^9.0.4",
diff --git a/stories/Alert.stories.tsx b/stories/Alert.stories.tsx
index 440f29a..a17e2c9 100644
--- a/stories/Alert.stories.tsx
+++ b/stories/Alert.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { CircleCheck, CircleX, Info } from "lucide-react";
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React from "react";
import {
Alert,
diff --git a/stories/ButtonWithDropdown.stories.tsx b/stories/ButtonWithDropdown.stories.tsx
index d6e93d3..57bdf29 100644
--- a/stories/ButtonWithDropdown.stories.tsx
+++ b/stories/ButtonWithDropdown.stories.tsx
@@ -1,7 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
-import { fn } from "storybook/test";
-
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React from "react";
+import { fn } from "storybook/test";
import { ButtonWithDropdown } from "../components/button-with-dropdown.js";
import { Button } from "../components/shadcn/button.js";
diff --git a/stories/abi-item-form-with-preview.stories.tsx b/stories/abi-item-form-with-preview.stories.tsx
index a1a0f2c..cc7ef3f 100644
--- a/stories/abi-item-form-with-preview.stories.tsx
+++ b/stories/abi-item-form-with-preview.stories.tsx
@@ -1,4 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React, { useState } from "react";
import { AbiItemFormWithPreview } from "../components/abi-form/abi-item-form-with-preview.js";
import { Input } from "../components/shadcn/input.js";
diff --git a/stories/click-to-copy.stories.tsx b/stories/click-to-copy.stories.tsx
index 5859ba0..b032936 100644
--- a/stories/click-to-copy.stories.tsx
+++ b/stories/click-to-copy.stories.tsx
@@ -1,5 +1,4 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
-import { fn } from "storybook/test";
import { ClickToCopy } from "../components/click-to-copy.js";
diff --git a/stories/forms/Checkbox.stories.tsx b/stories/forms/Checkbox.stories.tsx
index 851e200..6994ee7 100644
--- a/stories/forms/Checkbox.stories.tsx
+++ b/stories/forms/Checkbox.stories.tsx
@@ -1,7 +1,6 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
import { zodResolver } from "@hookform/resolvers/zod";
-import React, { useEffect } from "react";
+import type { Meta, StoryObj } from "@storybook/react-vite";
+import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { z } from "zod";
import { Form } from "../../components/form.js";
diff --git a/stories/forms/NumberField.stories.tsx b/stories/forms/NumberField.stories.tsx
index fd4fb13..e5c1b25 100644
--- a/stories/forms/NumberField.stories.tsx
+++ b/stories/forms/NumberField.stories.tsx
@@ -1,8 +1,7 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
import { zodResolver } from "@hookform/resolvers/zod";
+import type { Meta, StoryObj } from "@storybook/react-vite";
import { Check } from "lucide-react";
-import React, { useEffect } from "react";
+import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { z } from "zod";
import { Form } from "../../components/form.js";
diff --git a/stories/forms/Submit.stories.tsx b/stories/forms/Submit.stories.tsx
index c1e442a..1061015 100644
--- a/stories/forms/Submit.stories.tsx
+++ b/stories/forms/Submit.stories.tsx
@@ -1,6 +1,6 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
import { zodResolver } from "@hookform/resolvers/zod";
+import type { Meta, StoryObj } from "@storybook/react-vite";
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React from "react";
import { useForm } from "react-hook-form";
import { z } from "zod";
diff --git a/stories/forms/Text.stories.tsx b/stories/forms/Text.stories.tsx
index 94947c7..4135f1f 100644
--- a/stories/forms/Text.stories.tsx
+++ b/stories/forms/Text.stories.tsx
@@ -1,8 +1,7 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
import { zodResolver } from "@hookform/resolvers/zod";
+import type { Meta, StoryObj } from "@storybook/react-vite";
import { Check, LoaderCircle } from "lucide-react";
-import React, { useEffect } from "react";
+import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { z } from "zod";
import { Form } from "../../components/form.js";
diff --git a/stories/forms/Textarea.stories.tsx b/stories/forms/Textarea.stories.tsx
index 6a983d4..7d86879 100644
--- a/stories/forms/Textarea.stories.tsx
+++ b/stories/forms/Textarea.stories.tsx
@@ -1,8 +1,7 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
import { zodResolver } from "@hookform/resolvers/zod";
+import type { Meta, StoryObj } from "@storybook/react-vite";
import { Check } from "lucide-react";
-import React, { useEffect } from "react";
+import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { z } from "zod";
import { Form } from "../../components/form.js";
diff --git a/stories/infinite-scroll.stories.tsx b/stories/infinite-scroll.stories.tsx
index 67c0b8a..5248619 100644
--- a/stories/infinite-scroll.stories.tsx
+++ b/stories/infinite-scroll.stories.tsx
@@ -1,7 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { LoaderCircle } from "lucide-react";
-
-import React from "react";
+// biome-ignore lint/correctness/noUnusedImports: ignore
+import React, { useRef, useState } from "react";
import { InfiniteScroll } from "../components/infinite-scroll.js";
const meta: Meta = {
@@ -33,10 +33,10 @@ const Item = ({ item }: { item: Item }) => {
export const Default: Story = {
render: () => {
- const [loading, setLoading] = React.useState(false);
- const [hasMore, setHasMore] = React.useState(true);
- const [items, setItems] = React.useState- ([]);
- const listRef = React.useRef(null);
+ const [loading, setLoading] = useState(false);
+ const [hasMore, setHasMore] = useState(true);
+ const [items, setItems] = useState
- ([]);
+ const listRef = useRef(null);
const next = async () => {
setLoading(true);
diff --git a/stories/sidebar.stories.tsx b/stories/sidebar.stories.tsx
index f047465..5c83ca2 100644
--- a/stories/sidebar.stories.tsx
+++ b/stories/sidebar.stories.tsx
@@ -1,6 +1,6 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
-
import { ChevronRightIcon } from "@radix-ui/react-icons";
+import type { Meta, StoryObj } from "@storybook/react-vite";
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React from "react";
import { EthuiLogo } from "../components/ethui-logo";
import {
diff --git a/stories/solidity-call.stories.tsx b/stories/solidity-call.stories.tsx
index ba57217..b096a4b 100644
--- a/stories/solidity-call.stories.tsx
+++ b/stories/solidity-call.stories.tsx
@@ -1,5 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
-
+// biome-ignore lint/correctness/noUnusedImports: ignore
import React from "react";
import { SolidityCall } from "../components/solidity-call.js";
diff --git a/yarn.lock b/yarn.lock
index 0564992..7a5feeb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -205,18 +205,18 @@ __metadata:
languageName: node
linkType: hard
-"@biomejs/biome@npm:^1.9.4":
- version: 1.9.4
- resolution: "@biomejs/biome@npm:1.9.4"
- dependencies:
- "@biomejs/cli-darwin-arm64": "npm:1.9.4"
- "@biomejs/cli-darwin-x64": "npm:1.9.4"
- "@biomejs/cli-linux-arm64": "npm:1.9.4"
- "@biomejs/cli-linux-arm64-musl": "npm:1.9.4"
- "@biomejs/cli-linux-x64": "npm:1.9.4"
- "@biomejs/cli-linux-x64-musl": "npm:1.9.4"
- "@biomejs/cli-win32-arm64": "npm:1.9.4"
- "@biomejs/cli-win32-x64": "npm:1.9.4"
+"@biomejs/biome@npm:^2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/biome@npm:2.0.6"
+ dependencies:
+ "@biomejs/cli-darwin-arm64": "npm:2.0.6"
+ "@biomejs/cli-darwin-x64": "npm:2.0.6"
+ "@biomejs/cli-linux-arm64": "npm:2.0.6"
+ "@biomejs/cli-linux-arm64-musl": "npm:2.0.6"
+ "@biomejs/cli-linux-x64": "npm:2.0.6"
+ "@biomejs/cli-linux-x64-musl": "npm:2.0.6"
+ "@biomejs/cli-win32-arm64": "npm:2.0.6"
+ "@biomejs/cli-win32-x64": "npm:2.0.6"
dependenciesMeta:
"@biomejs/cli-darwin-arm64":
optional: true
@@ -236,62 +236,62 @@ __metadata:
optional: true
bin:
biome: bin/biome
- checksum: 10c0/b5655c5aed9a6fffe24f7d04f15ba4444389d0e891c9ed9106fab7388ac9b4be63185852cc2a937b22940dac3e550b71032a4afd306925cfea436c33e5646b3e
+ checksum: 10c0/eafaf3981580314c08085542152396f3417637d08d7b8aaee6a5173a978435d7688b1b6b547096e3a9d3573f03cfe526f7342dd341143c322c03d545df126f18
languageName: node
linkType: hard
-"@biomejs/cli-darwin-arm64@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-darwin-arm64@npm:1.9.4"
+"@biomejs/cli-darwin-arm64@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-darwin-arm64@npm:2.0.6"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@biomejs/cli-darwin-x64@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-darwin-x64@npm:1.9.4"
+"@biomejs/cli-darwin-x64@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-darwin-x64@npm:2.0.6"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@biomejs/cli-linux-arm64-musl@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-linux-arm64-musl@npm:1.9.4"
+"@biomejs/cli-linux-arm64-musl@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-linux-arm64-musl@npm:2.0.6"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@biomejs/cli-linux-arm64@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-linux-arm64@npm:1.9.4"
+"@biomejs/cli-linux-arm64@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-linux-arm64@npm:2.0.6"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@biomejs/cli-linux-x64-musl@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-linux-x64-musl@npm:1.9.4"
+"@biomejs/cli-linux-x64-musl@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-linux-x64-musl@npm:2.0.6"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@biomejs/cli-linux-x64@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-linux-x64@npm:1.9.4"
+"@biomejs/cli-linux-x64@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-linux-x64@npm:2.0.6"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@biomejs/cli-win32-arm64@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-win32-arm64@npm:1.9.4"
+"@biomejs/cli-win32-arm64@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-win32-arm64@npm:2.0.6"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@biomejs/cli-win32-x64@npm:1.9.4":
- version: 1.9.4
- resolution: "@biomejs/cli-win32-x64@npm:1.9.4"
+"@biomejs/cli-win32-x64@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@biomejs/cli-win32-x64@npm:2.0.6"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -573,7 +573,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@ethui/ui@workspace:."
dependencies:
- "@biomejs/biome": "npm:^1.9.4"
+ "@biomejs/biome": "npm:^2.0.6"
"@chromatic-com/storybook": "npm:^4.0.0-next.16"
"@ethui/abiparse": "npm:^0.0.4"
"@fontsource/source-code-pro": "npm:^5.2.5"