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"