Skip to content

Commit

Permalink
fix: import Radix Themes component from direct import path to avoid u…
Browse files Browse the repository at this point in the history
…nnecessary components bundled in client bundle
  • Loading branch information
mwskwong committed Feb 21, 2025
1 parent 89c0477 commit 958d412
Show file tree
Hide file tree
Showing 25 changed files with 163 additions and 156 deletions.
32 changes: 25 additions & 7 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ const compat = new FlatCompat({
baseDirectory: import.meta.dirname,
});

const radixThemesRestrictedImportMessage =
'Please use `import { <Component> } from "@radix-ui/themes/components/<component>"`instead, to avoid unnecessary Radix dependencies being bundled to the client bundle, due to Next.js bundling behavior and Radix Themes now imports from `radix-ui` instead of `@radix-ui/<component>`.';

const config = tseslint.config(
eslint.configs.recommended,
tseslint.configs.strictTypeChecked,
Expand Down Expand Up @@ -70,13 +73,28 @@ const config = tseslint.config(
"warn",
{ fixStyle: "inline-type-imports" },
],
"@typescript-eslint/no-confusing-void-expression": [
"error",
{ ignoreArrowShorthand: true },
],
"@typescript-eslint/no-misused-promises": [
"error",
{ checksVoidReturn: { attributes: false } },
],
"@typescript-eslint/no-confusing-void-expression": [
"@typescript-eslint/no-restricted-imports": [
"error",
{ ignoreArrowShorthand: true },
{
paths: [
{
message: radixThemesRestrictedImportMessage,
name: "@radix-ui/themes",
},
{
message: radixThemesRestrictedImportMessage,
name: "@radix-ui/themes/components/index",
},
],
},
],
"@typescript-eslint/no-unused-vars": [
"error",
Expand All @@ -86,8 +104,8 @@ const config = tseslint.config(
caughtErrors: "all",
caughtErrorsIgnorePattern: "^_",
destructuredArrayIgnorePattern: "^_",
varsIgnorePattern: "^_",
ignoreRestSiblings: true,
varsIgnorePattern: "^_",
},
],
"@typescript-eslint/restrict-template-expressions": [
Expand All @@ -101,13 +119,14 @@ const config = tseslint.config(
allowRegExp: false,
},
],
"import/namespace": "off",
"import/default": "off",
"import/namespace": "off",
"import/no-named-as-default-member": "off",
"import/no-unresolved": "off",
"import/order": [
"warn",
{
alphabetize: { order: "asc" },
groups: [
"builtin",
"external",
Expand All @@ -117,19 +136,18 @@ const config = tseslint.config(
"index",
],
"newlines-between": "always",
alphabetize: { order: "asc" },
},
],
"react-compiler/react-compiler": "error",
"react/jsx-sort-props": [
"warn",
{
callbacksLast: true,
shorthandFirst: true,
multiline: "last",
reservedFirst: true,
shorthandFirst: true,
},
],
"react-compiler/react-compiler": "error",
"sort-imports": ["warn", { ignoreDeclarationSort: true }],
"unicorn/prevent-abbreviations": "off",
},
Expand Down
2 changes: 1 addition & 1 deletion next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ const config = {
experimental: {
typedEnv: true,
reactCompiler: true,
optimizePackageImports: ["@radix-ui/themes"],
optimizePackageImports: ["@radix-ui/themes", "radix-ui"],
},
} satisfies NextConfig;

Expand Down
6 changes: 5 additions & 1 deletion src/app/%5Fparams/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { Code, Container, Heading, Link, Section } from "@radix-ui/themes";
import { Code } from "@radix-ui/themes/components/code";
import { Container } from "@radix-ui/themes/components/container";
import * as DataList from "@radix-ui/themes/components/data-list";
import { Heading } from "@radix-ui/themes/components/heading";
import { Link } from "@radix-ui/themes/components/link";
import { Section } from "@radix-ui/themes/components/section";
import { type Metadata } from "next";
import { type FC } from "react";

Expand Down
4 changes: 3 additions & 1 deletion src/app/blog/[slug]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { Container, Flex, Section } from "@radix-ui/themes";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { Section } from "@radix-ui/themes/components/section";
import { type Metadata, type ResolvingMetadata } from "next";
import { notFound } from "next/navigation";
import { type FC } from "react";
Expand Down
18 changes: 8 additions & 10 deletions src/app/blog/page.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import {
Box,
Card,
Container,
Flex,
Grid,
Heading,
Section,
Text,
} from "@radix-ui/themes";
import { Box } from "@radix-ui/themes/components/box";
import { Card } from "@radix-ui/themes/components/card";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { Grid } from "@radix-ui/themes/components/grid";
import { Heading } from "@radix-ui/themes/components/heading";
import { Section } from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import { type Metadata } from "next";
import Image from "next/image";
import Link from "next/link";
Expand Down
19 changes: 8 additions & 11 deletions src/app/education/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,14 @@ import "@radix-ui/themes/tokens/colors/lime.css";
import "@radix-ui/themes/tokens/colors/ruby.css";
import "@radix-ui/themes/tokens/colors/violet.css";

import {
Badge,
type BadgeProps,
Card,
Container,
Flex,
Grid,
Heading,
Section,
Text,
} from "@radix-ui/themes";
import { Badge, type BadgeProps } from "@radix-ui/themes/components/badge";
import { Card } from "@radix-ui/themes/components/card";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { Grid } from "@radix-ui/themes/components/grid";
import { Heading } from "@radix-ui/themes/components/heading";
import { Section } from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import { type Metadata } from "next";
import Image from "next/image";
import { type BreadcrumbList, type Graph } from "schema-dts";
Expand Down
16 changes: 7 additions & 9 deletions src/app/experience/page.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import {
Box,
Container,
Flex,
Heading,
Section,
Text,
Tooltip,
} from "@radix-ui/themes";
import { Box } from "@radix-ui/themes/components/box";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { Section } from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import { Tooltip } from "@radix-ui/themes/components/tooltip";
import { type Metadata } from "next";
import Image from "next/image";
import { type BreadcrumbList, type Graph } from "schema-dts";
Expand Down
2 changes: 1 addition & 1 deletion src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import "./globals.css";

import { Theme } from "@radix-ui/themes";
import { Theme } from "@radix-ui/themes/components/theme";
import { Analytics } from "@vercel/analytics/next";
import { SpeedInsights } from "@vercel/speed-insights/next";
import clsx from "clsx";
Expand Down
18 changes: 8 additions & 10 deletions src/app/not-found.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import {
Box,
Button,
Container,
Flex,
Heading,
Link,
Section,
Text,
} from "@radix-ui/themes";
import { Box } from "@radix-ui/themes/components/box";
import { Button } from "@radix-ui/themes/components/button";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { Link } from "@radix-ui/themes/components/link";
import { Section } from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import NextLink from "next/link";
import { type FC } from "react";

Expand Down
4 changes: 3 additions & 1 deletion src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { Box, Container, Flex } from "@radix-ui/themes";
import { Box } from "@radix-ui/themes/components/box";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { type FC } from "react";
import { type BreadcrumbList, type Graph, type WebSite } from "schema-dts";

Expand Down
18 changes: 8 additions & 10 deletions src/app/skills/page.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import {
Avatar,
Badge,
Box,
Card,
Container,
Flex,
Heading,
Section,
} from "@radix-ui/themes";
import { Avatar } from "@radix-ui/themes/components/avatar";
import { Badge } from "@radix-ui/themes/components/badge";
import { Box } from "@radix-ui/themes/components/box";
import { Card } from "@radix-ui/themes/components/card";
import { Container } from "@radix-ui/themes/components/container";
import { Flex } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { Section } from "@radix-ui/themes/components/section";
import { type Metadata } from "next";
import { type BreadcrumbList, type Graph } from "schema-dts";

Expand Down
5 changes: 4 additions & 1 deletion src/components/blog-post/copy-code-button.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
"use client";

import { IconButton, type IconButtonProps } from "@radix-ui/themes";
import {
IconButton,
type IconButtonProps,
} from "@radix-ui/themes/components/icon-button";
import { IconCheck, IconCopy } from "@tabler/icons-react";
import { type FC, useEffect, useRef, useState } from "react";

Expand Down
5 changes: 4 additions & 1 deletion src/components/blog-post/copy-link-button.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
"use client";

import { IconButton, type IconButtonProps } from "@radix-ui/themes";
import {
IconButton,
type IconButtonProps,
} from "@radix-ui/themes/components/icon-button";
import { IconCheck, IconLink } from "@tabler/icons-react";
import { usePathname } from "next/navigation";
import { type FC, useEffect, useRef, useState } from "react";
Expand Down
27 changes: 13 additions & 14 deletions src/components/blog-post/main-content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,22 @@ import "@radix-ui/themes/tokens/colors/amber.css";
import "@radix-ui/themes/tokens/colors/blue.css";
import "@radix-ui/themes/tokens/colors/red.css";

import { Box } from "@radix-ui/themes/components/box";
import * as Callout from "@radix-ui/themes/components/callout";
import { Card } from "@radix-ui/themes/components/card";
import { Code } from "@radix-ui/themes/components/code";
import { Em } from "@radix-ui/themes/components/em";
import { Flex } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { Inset } from "@radix-ui/themes/components/inset";
import { Link } from "@radix-ui/themes/components/link";
import { ScrollArea } from "@radix-ui/themes/components/scroll-area";
import {
Box,
Card,
Code,
Em,
Flex,
Heading,
Inset,
Link,
ScrollArea,
Section,
type SectionProps,
Strong,
Text,
} from "@radix-ui/themes";
// compound component needs to be imported from individual entry point to avoid the entire @radix-ui/themes being bundled in the client bundle
import * as Callout from "@radix-ui/themes/components/callout";
} from "@radix-ui/themes/components/section";
import { Strong } from "@radix-ui/themes/components/strong";
import { Text } from "@radix-ui/themes/components/text";
import {
IconAlertTriangle,
IconExclamationCircle,
Expand Down
12 changes: 6 additions & 6 deletions src/components/blog-post/sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Card } from "@radix-ui/themes/components/card";
import { Flex } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { IconButton } from "@radix-ui/themes/components/icon-button";
import {
Card,
Flex,
Heading,
IconButton,
Section,
type SectionProps,
Text,
} from "@radix-ui/themes";
} from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import {
IconBrandFacebook,
IconBrandLinkedin,
Expand Down
4 changes: 3 additions & 1 deletion src/components/breadcrumb.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { Flex, type FlexProps, Link, Text } from "@radix-ui/themes";
import { Flex, type FlexProps } from "@radix-ui/themes/components/flex";
import { Link } from "@radix-ui/themes/components/link";
import { Text } from "@radix-ui/themes/components/text";
import { IconChevronRight } from "@tabler/icons-react";
import NextLink from "next/link";
import { type FC, Fragment } from "react";
Expand Down
10 changes: 5 additions & 5 deletions src/components/footer.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Box } from "@radix-ui/themes/components/box";
import { Flex } from "@radix-ui/themes/components/flex";
import { IconButton } from "@radix-ui/themes/components/icon-button";
import {
Box,
Flex,
IconButton,
Section,
type SectionProps,
Text,
} from "@radix-ui/themes";
} from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import {
IconBrandGithub,
IconBrandLinkedin,
Expand Down
15 changes: 6 additions & 9 deletions src/components/home/about.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import {
Box,
Button,
Flex,
type FlexProps,
Heading,
Section,
Text,
} from "@radix-ui/themes";
import { Box } from "@radix-ui/themes/components/box";
import { Button } from "@radix-ui/themes/components/button";
import { Flex, type FlexProps } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { Section } from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import Image from "next/image";
import { type FC } from "react";

Expand Down
15 changes: 6 additions & 9 deletions src/components/home/featured-blog-posts.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import {
Button,
Card,
Flex,
type FlexProps,
Heading,
Section,
Text,
} from "@radix-ui/themes";
import { Button } from "@radix-ui/themes/components/button";
import { Card } from "@radix-ui/themes/components/card";
import { Flex, type FlexProps } from "@radix-ui/themes/components/flex";
import { Heading } from "@radix-ui/themes/components/heading";
import { Section } from "@radix-ui/themes/components/section";
import { Text } from "@radix-ui/themes/components/text";
import { IconArrowRight } from "@tabler/icons-react";
import Image from "next/image";
import Link from "next/link";
Expand Down
Loading

0 comments on commit 958d412

Please sign in to comment.