diff --git a/app/[locale]/(main)/ClientComponents/NetworkChart.tsx b/app/[locale]/(main)/ClientComponents/NetworkChart.tsx index 26d32fb..8e372bc 100644 --- a/app/[locale]/(main)/ClientComponents/NetworkChart.tsx +++ b/app/[locale]/(main)/ClientComponents/NetworkChart.tsx @@ -1,8 +1,11 @@ "use client"; -import * as React from "react"; -import { CartesianGrid, Line, LineChart, XAxis, YAxis } from "recharts"; - +import NetworkChartLoading from "@/app/[locale]/(main)/ClientComponents/NetworkChartLoading"; +import { + NezhaAPIMonitor, + ServerMonitorChart, +} from "@/app/[locale]/types/nezha-api"; +import { BackIcon } from "@/components/Icon"; import { Card, CardContent, @@ -18,15 +21,15 @@ import { ChartTooltip, ChartTooltipContent, } from "@/components/ui/chart"; -import useSWR from "swr"; -import { NezhaAPIMonitor, ServerMonitorChart } from "../../types/nezha-api"; +import getEnv from "@/lib/env-entry"; import { formatTime, nezhaFetcher } from "@/lib/utils"; import { formatRelativeTime } from "@/lib/utils"; -import { BackIcon } from "@/components/Icon"; -import { useRouter } from "next/navigation"; import { useLocale } from "next-intl"; import { useTranslations } from "next-intl"; -import NetworkChartLoading from "./NetworkChartLoading"; +import { useRouter } from "next/navigation"; +import * as React from "react"; +import { CartesianGrid, Line, LineChart, XAxis, YAxis } from "recharts"; +import useSWR from "swr"; interface ResultItem { created_at: number; @@ -38,6 +41,10 @@ export function NetworkChartClient({ server_id }: { server_id: number }) { const { data, error } = useSWR( `/api/monitor?server_id=${server_id}`, nezhaFetcher, + { + refreshInterval: + Number(getEnv("NEXT_PUBLIC_NezhaFetchInterval")) || 15000, + }, ); if (error) diff --git a/app/[locale]/(main)/ClientComponents/ServerListClient.tsx b/app/[locale]/(main)/ClientComponents/ServerListClient.tsx index 9226a7a..eea8010 100644 --- a/app/[locale]/(main)/ClientComponents/ServerListClient.tsx +++ b/app/[locale]/(main)/ClientComponents/ServerListClient.tsx @@ -1,13 +1,13 @@ "use client"; -import { ServerApi } from "../../types/nezha-api"; -import ServerCard from "../../../../components/ServerCard"; -import { nezhaFetcher } from "../../../../lib/utils"; -import useSWR from "swr"; -import getEnv from "../../../../lib/env-entry"; +import { ServerApi } from "@/app/[locale]/types/nezha-api"; +import ServerCard from "@/components/ServerCard"; import Switch from "@/components/Switch"; -import { useState } from "react"; +import getEnv from "@/lib/env-entry"; +import { nezhaFetcher } from "@/lib/utils"; import { useTranslations } from "next-intl"; +import { useState } from "react"; +import useSWR from "swr"; export default function ServerListClient() { const t = useTranslations("ServerListClient"); diff --git a/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx b/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx index 85a6af6..14ec2a3 100644 --- a/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx +++ b/app/[locale]/(main)/ClientComponents/ServerOverviewClient.tsx @@ -1,14 +1,16 @@ "use client"; import { useTranslations } from "next-intl"; -import { Card, CardContent } from "../../../../components/ui/card"; -import blogMan from "../../../../public/blog-man.webp"; import Image from "next/image"; import useSWR from "swr"; -import { formatBytes, nezhaFetcher } from "../../../../lib/utils"; -import { Loader } from "../../../../components/loading/Loader"; -import { ServerApi } from "../../types/nezha-api"; -import getEnv from "../../../../lib/env-entry"; + +import { Loader } from "@/components/loading/Loader"; +import { Card, CardContent } from "@/components/ui/card"; +import getEnv from "@/lib/env-entry"; +import { formatBytes, nezhaFetcher } from "@/lib/utils"; +import blogMan from "@/public/blog-man.webp"; +import { ServerApi } from "@/app/[locale]/types/nezha-api"; + export default function ServerOverviewClient() { const t = useTranslations("ServerOverviewClient"); const { data } = useSWR("/api/server", nezhaFetcher); diff --git a/app/[locale]/(main)/[id]/page.tsx b/app/[locale]/(main)/[id]/page.tsx index de1a312..b46b6af 100644 --- a/app/[locale]/(main)/[id]/page.tsx +++ b/app/[locale]/(main)/[id]/page.tsx @@ -1,4 +1,4 @@ -import { NetworkChartClient } from "../ClientComponents/NetworkChart"; +import { NetworkChartClient } from "@/app/[locale]/(main)/ClientComponents/NetworkChart"; export default function Page({ params }: { params: { id: string } }) { return ( diff --git a/app/[locale]/(main)/footer.tsx b/app/[locale]/(main)/footer.tsx index 4bfcffc..7d2fb36 100644 --- a/app/[locale]/(main)/footer.tsx +++ b/app/[locale]/(main)/footer.tsx @@ -1,4 +1,5 @@ import { useTranslations } from "next-intl"; + export default function Footer() { const t = useTranslations("Footer"); return ( diff --git a/app/[locale]/(main)/header.tsx b/app/[locale]/(main)/header.tsx index 53a5a0e..ba182b4 100644 --- a/app/[locale]/(main)/header.tsx +++ b/app/[locale]/(main)/header.tsx @@ -1,12 +1,13 @@ "use client"; -import { useTranslations } from "next-intl"; -import React, { useEffect, useRef, useState } from "react"; -import Image from "next/image"; -import { Separator } from "../../../components/ui/separator"; -import { DateTime } from "luxon"; -import { ModeToggle } from "../../../components/ThemeSwitcher"; import { LanguageSwitcher } from "@/components/LanguageSwitcher"; +import { ModeToggle } from "@/components/ThemeSwitcher"; +import { Separator } from "@/components/ui/separator"; +import { DateTime } from "luxon"; +import { useTranslations } from "next-intl"; +import Image from "next/image"; +import React, { useEffect, useRef, useState } from "react"; + function Header() { const t = useTranslations("Header"); return ( diff --git a/app/[locale]/(main)/layout.tsx b/app/[locale]/(main)/layout.tsx index 137532e..84bd06e 100644 --- a/app/[locale]/(main)/layout.tsx +++ b/app/[locale]/(main)/layout.tsx @@ -1,6 +1,6 @@ -import React from "react"; +import Footer from "@/app/[locale]/(main)/footer"; import Header from "@/app/[locale]/(main)/header"; -import Footer from "./footer"; +import React from "react"; type DashboardProps = { children: React.ReactNode; diff --git a/app/[locale]/(main)/page.tsx b/app/[locale]/(main)/page.tsx index 4de86cc..79b4bd9 100644 --- a/app/[locale]/(main)/page.tsx +++ b/app/[locale]/(main)/page.tsx @@ -1,6 +1,6 @@ +import ServerList from "@/components/ServerList"; +import ServerOverview from "@/components/ServerOverview"; import { unstable_setRequestLocale } from "next-intl/server"; -import ServerList from "../../../components/ServerList"; -import ServerOverview from "../../../components/ServerOverview"; export default function Home({ params: { locale }, diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index 8bc866f..94542ae 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -1,18 +1,17 @@ // @auto-i18n-check. Please do not delete the line. - -import "@/styles/globals.css"; -import "/node_modules/flag-icons/css/flag-icons.min.css"; - -import React from "react"; -import { NextIntlClientProvider, useMessages } from "next-intl"; -import { PublicEnvScript } from "next-runtime-env"; -import type { Metadata } from "next"; -import { Inter as FontSans } from "next/font/google"; -import { ThemeProvider } from "next-themes"; -import { Viewport } from "next"; -import { cn } from "@/lib/utils"; import { locales } from "@/i18n-metadata"; +import { cn } from "@/lib/utils"; +import "@/styles/globals.css"; +import type { Metadata } from "next"; +import { Viewport } from "next"; +import { NextIntlClientProvider, useMessages } from "next-intl"; import { unstable_setRequestLocale } from "next-intl/server"; +import { PublicEnvScript } from "next-runtime-env"; +import { ThemeProvider } from "next-themes"; +import { Inter as FontSans } from "next/font/google"; +import React from "react"; + +import "/node_modules/flag-icons/css/flag-icons.min.css"; const fontSans = FontSans({ subsets: ["latin"], diff --git a/app/[locale]/not-found.tsx b/app/[locale]/not-found.tsx index ad0c9a7..c16c1ee 100644 --- a/app/[locale]/not-found.tsx +++ b/app/[locale]/not-found.tsx @@ -1,6 +1,7 @@ import { useTranslations } from "next-intl"; import Image from "next/image"; import Link from "next/link"; + export default function NotFoundPage() { const t = useTranslations("NotFoundPage"); return ( diff --git a/app/api/monitor/route.ts b/app/api/monitor/route.ts index 2db4d45..e03fe89 100644 --- a/app/api/monitor/route.ts +++ b/app/api/monitor/route.ts @@ -2,6 +2,8 @@ import { ServerMonitorChart } from "@/app/[locale]/types/nezha-api"; import { GetServerMonitor } from "@/lib/serverFetch"; import { NextResponse } from "next/server"; +export const dynamic = "force-dynamic"; + interface NezhaDataResponse { error?: string; data?: ServerMonitorChart; diff --git a/bun.lockb b/bun.lockb index 6737957..2e83fa3 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components/BlurLayer.tsx b/components/BlurLayer.tsx index 745b752..45b86de 100644 --- a/components/BlurLayer.tsx +++ b/components/BlurLayer.tsx @@ -1,4 +1,5 @@ import React from "react"; + const BlurLayers = () => { const computeLayerStyle = (index: number) => { const blurAmount = index * 3.7037; diff --git a/components/LanguageSwitcher.tsx b/components/LanguageSwitcher.tsx index 0d5fb51..5f944a2 100644 --- a/components/LanguageSwitcher.tsx +++ b/components/LanguageSwitcher.tsx @@ -1,10 +1,5 @@ "use client"; -import { useLocale } from "next-intl"; -import { localeItems } from "../i18n-metadata"; -import { useRouter, usePathname } from "next/navigation"; -import * as React from "react"; - import { Button } from "@/components/ui/button"; import { DropdownMenu, @@ -12,6 +7,11 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; +import { useLocale } from "next-intl"; +import { usePathname, useRouter } from "next/navigation"; +import * as React from "react"; + +import { localeItems } from "../i18n-metadata"; export function LanguageSwitcher() { const locale = useLocale(); diff --git a/components/ServerCard.tsx b/components/ServerCard.tsx index 79cefc8..d9c7970 100644 --- a/components/ServerCard.tsx +++ b/components/ServerCard.tsx @@ -1,5 +1,3 @@ -import { useLocale, useTranslations } from "next-intl"; -import { NezhaAPISafe } from "../app/[locale]/types/nezha-api"; import ServerUsageBar from "@/components/ServerUsageBar"; import { Card } from "@/components/ui/card"; import { @@ -8,12 +6,14 @@ import { PopoverTrigger, } from "@/components/ui/popover"; import { cn, formatNezhaInfo } from "@/lib/utils"; -import ServerCardPopover from "./ServerCardPopover"; - +import { useLocale, useTranslations } from "next-intl"; import { env } from "next-runtime-env"; -import ServerFlag from "./ServerFlag"; import { useRouter } from "next/navigation"; +import { NezhaAPISafe } from "@/app/[locale]/types/nezha-api"; +import ServerCardPopover from "@/components/ServerCardPopover"; +import ServerFlag from "@/components/ServerFlag"; + export default function ServerCard({ serverInfo, }: { diff --git a/components/ServerCardPopover.tsx b/components/ServerCardPopover.tsx index b886ec5..c0f8031 100644 --- a/components/ServerCardPopover.tsx +++ b/components/ServerCardPopover.tsx @@ -1,6 +1,7 @@ -import { useTranslations } from "next-intl"; -import { NezhaAPISafe } from "../app/[locale]/types/nezha-api"; import { cn, formatBytes } from "@/lib/utils"; +import { useTranslations } from "next-intl"; + +import { NezhaAPISafe } from "@/app/[locale]/types/nezha-api"; export function ServerCardPopoverCard({ className, diff --git a/components/ServerFlag.tsx b/components/ServerFlag.tsx index f128c27..4747584 100644 --- a/components/ServerFlag.tsx +++ b/components/ServerFlag.tsx @@ -1,5 +1,5 @@ -import { useEffect, useState } from "react"; import getUnicodeFlagIcon from "country-flag-icons/unicode"; +import { useEffect, useState } from "react"; export default function ServerFlag({ country_code }: { country_code: string }) { const [supportsEmojiFlags, setSupportsEmojiFlags] = useState(false); diff --git a/components/ServerList.tsx b/components/ServerList.tsx index 9448640..5152f49 100644 --- a/components/ServerList.tsx +++ b/components/ServerList.tsx @@ -1,6 +1,6 @@ import React from "react"; -import ServerListClient from "../app/[locale]/(main)/ClientComponents/ServerListClient"; +import ServerListClient from "@/app/[locale]/(main)/ClientComponents/ServerListClient"; export default async function ServerList() { return ; diff --git a/components/ServerOverview.tsx b/components/ServerOverview.tsx index 359dc63..900fd90 100644 --- a/components/ServerOverview.tsx +++ b/components/ServerOverview.tsx @@ -1,4 +1,4 @@ -import ServerOverviewClient from "../app/[locale]/(main)/ClientComponents/ServerOverviewClient"; +import ServerOverviewClient from "@/app/[locale]/(main)/ClientComponents/ServerOverviewClient"; export default async function ServerOverview() { return ; diff --git a/components/ServerUsageBar.tsx b/components/ServerUsageBar.tsx index 8c5b72b..108d90c 100644 --- a/components/ServerUsageBar.tsx +++ b/components/ServerUsageBar.tsx @@ -1,6 +1,5 @@ -import React from "react"; - import { Progress } from "@/components/ui/progress"; +import React from "react"; type ServerUsageBarProps = { value: number; diff --git a/components/Switch.tsx b/components/Switch.tsx index c51c121..607889e 100644 --- a/components/Switch.tsx +++ b/components/Switch.tsx @@ -1,8 +1,8 @@ "use client"; -import React from "react"; import { cn } from "@/lib/utils"; import { motion } from "framer-motion"; +import React from "react"; export default function Switch({ allTag, diff --git a/components/ThemeSwitcher.tsx b/components/ThemeSwitcher.tsx index d98794e..80e30b4 100644 --- a/components/ThemeSwitcher.tsx +++ b/components/ThemeSwitcher.tsx @@ -1,10 +1,5 @@ "use client"; -import { useTranslations } from "next-intl"; -import { Moon, Sun } from "lucide-react"; -import { useTheme } from "next-themes"; -import * as React from "react"; - import { Button } from "@/components/ui/button"; import { DropdownMenu, @@ -12,6 +7,10 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; +import { Moon, Sun } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useTheme } from "next-themes"; +import * as React from "react"; export function ModeToggle() { const { setTheme } = useTheme(); diff --git a/components/ui/badge.tsx b/components/ui/badge.tsx index b12af0a..dea446a 100644 --- a/components/ui/badge.tsx +++ b/components/ui/badge.tsx @@ -1,7 +1,6 @@ -import { cva, type VariantProps } from "class-variance-authority"; -import * as React from "react"; - import { cn } from "@/lib/utils"; +import { type VariantProps, cva } from "class-variance-authority"; +import * as React from "react"; const badgeVariants = cva( "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", diff --git a/components/ui/button.tsx b/components/ui/button.tsx index 856f6e5..7223303 100644 --- a/components/ui/button.tsx +++ b/components/ui/button.tsx @@ -1,8 +1,7 @@ -import { Slot } from "@radix-ui/react-slot"; -import { cva, type VariantProps } from "class-variance-authority"; -import * as React from "react"; - import { cn } from "@/lib/utils"; +import { Slot } from "@radix-ui/react-slot"; +import { type VariantProps, cva } from "class-variance-authority"; +import * as React from "react"; const buttonVariants = cva( "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50", diff --git a/components/ui/card.tsx b/components/ui/card.tsx index fc2d9c7..ab6efa5 100644 --- a/components/ui/card.tsx +++ b/components/ui/card.tsx @@ -1,6 +1,5 @@ -import * as React from "react"; - import { cn } from "@/lib/utils"; +import * as React from "react"; const Card = React.forwardRef< HTMLDivElement, diff --git a/components/ui/chart.tsx b/components/ui/chart.tsx index eaa0bee..48b4d7e 100644 --- a/components/ui/chart.tsx +++ b/components/ui/chart.tsx @@ -1,10 +1,9 @@ "use client"; +import { cn } from "@/lib/utils"; import * as React from "react"; import * as RechartsPrimitive from "recharts"; -import { cn } from "@/lib/utils"; - // Format: { THEME_NAME: CSS_SELECTOR } const THEMES = { light: "", dark: ".dark" } as const; diff --git a/components/ui/dropdown-menu.tsx b/components/ui/dropdown-menu.tsx index f3c9dcd..29e9705 100644 --- a/components/ui/dropdown-menu.tsx +++ b/components/ui/dropdown-menu.tsx @@ -1,11 +1,10 @@ "use client"; +import { cn } from "@/lib/utils"; import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; import { Check, ChevronRight, Circle } from "lucide-react"; import * as React from "react"; -import { cn } from "@/lib/utils"; - const DropdownMenu = DropdownMenuPrimitive.Root; const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; diff --git a/components/ui/input.tsx b/components/ui/input.tsx index 9d631e7..5b0bce3 100644 --- a/components/ui/input.tsx +++ b/components/ui/input.tsx @@ -1,6 +1,5 @@ -import * as React from "react"; - import { cn } from "@/lib/utils"; +import * as React from "react"; export interface InputProps extends React.InputHTMLAttributes {} diff --git a/components/ui/navigation-menu.tsx b/components/ui/navigation-menu.tsx index 3e4cf52..e95d8b8 100644 --- a/components/ui/navigation-menu.tsx +++ b/components/ui/navigation-menu.tsx @@ -1,10 +1,9 @@ +import { cn } from "@/lib/utils"; import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"; import { cva } from "class-variance-authority"; import { ChevronDown } from "lucide-react"; import * as React from "react"; -import { cn } from "@/lib/utils"; - const NavigationMenu = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef diff --git a/components/ui/popover.tsx b/components/ui/popover.tsx index 73be7bb..f397842 100644 --- a/components/ui/popover.tsx +++ b/components/ui/popover.tsx @@ -1,9 +1,8 @@ "use client"; -import * as React from "react"; -import * as PopoverPrimitive from "@radix-ui/react-popover"; - import { cn } from "@/lib/utils"; +import * as PopoverPrimitive from "@radix-ui/react-popover"; +import * as React from "react"; const Popover = PopoverPrimitive.Root; diff --git a/components/ui/progress.tsx b/components/ui/progress.tsx index 7d7e9fa..07031af 100644 --- a/components/ui/progress.tsx +++ b/components/ui/progress.tsx @@ -1,10 +1,9 @@ "use client"; +import { cn } from "@/lib/utils"; import * as ProgressPrimitive from "@radix-ui/react-progress"; import * as React from "react"; -import { cn } from "@/lib/utils"; - const Progress = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { diff --git a/components/ui/separator.tsx b/components/ui/separator.tsx index 9ac3b95..df54e34 100644 --- a/components/ui/separator.tsx +++ b/components/ui/separator.tsx @@ -1,9 +1,8 @@ "use client"; -import * as React from "react"; -import * as SeparatorPrimitive from "@radix-ui/react-separator"; - import { cn } from "@/lib/utils"; +import * as SeparatorPrimitive from "@radix-ui/react-separator"; +import * as React from "react"; const Separator = React.forwardRef< React.ElementRef, diff --git a/components/ui/sheet.tsx b/components/ui/sheet.tsx index f075348..94afe2f 100644 --- a/components/ui/sheet.tsx +++ b/components/ui/sheet.tsx @@ -1,12 +1,11 @@ "use client"; +import { cn } from "@/lib/utils"; import * as SheetPrimitive from "@radix-ui/react-dialog"; -import { cva, type VariantProps } from "class-variance-authority"; +import { type VariantProps, cva } from "class-variance-authority"; import { X } from "lucide-react"; import * as React from "react"; -import { cn } from "@/lib/utils"; - const Sheet = SheetPrimitive.Root; const SheetTrigger = SheetPrimitive.Trigger; diff --git a/components/ui/tooltip.tsx b/components/ui/tooltip.tsx index 383c2be..2d0ad74 100644 --- a/components/ui/tooltip.tsx +++ b/components/ui/tooltip.tsx @@ -1,10 +1,9 @@ "use client"; +import { cn } from "@/lib/utils"; import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import * as React from "react"; -import { cn } from "@/lib/utils"; - const TooltipProvider = TooltipPrimitive.Provider; const Tooltip = TooltipPrimitive.Root; diff --git a/i18n-metadata.ts b/i18n-metadata.ts index 3151be8..2d69f42 100644 --- a/i18n-metadata.ts +++ b/i18n-metadata.ts @@ -1,5 +1,4 @@ // @auto-i18n-check. Please do not delete the line. - import getEnv from "./lib/env-entry"; export const localeItems = [ diff --git a/i18n.ts b/i18n.ts index 2c40c0d..f000d4e 100644 --- a/i18n.ts +++ b/i18n.ts @@ -1,7 +1,7 @@ // @auto-i18n-check. Please do not delete the line. - -import { notFound } from "next/navigation"; import { getRequestConfig } from "next-intl/server"; +import { notFound } from "next/navigation"; + import { locales } from "./i18n-metadata"; export default getRequestConfig(async ({ locale }) => { diff --git a/lib/serverFetch.tsx b/lib/serverFetch.tsx index bb20858..523f8ad 100644 --- a/lib/serverFetch.tsx +++ b/lib/serverFetch.tsx @@ -1,9 +1,10 @@ "use server"; -import { NezhaAPI, ServerApi } from "../app/[locale]/types/nezha-api"; -import { MakeOptional } from "../app/[locale]/types/utils"; import { unstable_noStore as noStore } from "next/cache"; -import getEnv from "./env-entry"; + +import { NezhaAPI, ServerApi } from "@/app/[locale]/types/nezha-api"; +import { MakeOptional } from "@/app/[locale]/types/utils"; +import getEnv from "@/lib/env-entry"; export async function GetNezhaData() { noStore(); diff --git a/lib/sseFetch.tsx b/lib/sseFetch.tsx index 7667e11..6ab6693 100644 --- a/lib/sseFetch.tsx +++ b/lib/sseFetch.tsx @@ -1,4 +1,5 @@ "use client"; + import useSWRSubscription, { type SWRSubscriptionOptions, } from "swr/subscription"; diff --git a/lib/utils.ts b/lib/utils.ts index 40d13d3..8abce68 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,7 +1,8 @@ -import { NezhaAPISafe } from "../app/[locale]/types/nezha-api"; import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; +import { NezhaAPISafe } from "@/app/[locale]/types/nezha-api"; + export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } diff --git a/middleware.ts b/middleware.ts index 6b10f79..92342ad 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,6 +1,6 @@ // @auto-i18n-check. Please do not delete the line. - import createMiddleware from "next-intl/middleware"; + import { defaultLocale, locales } from "./i18n-metadata"; export default createMiddleware({ diff --git a/next.config.mjs b/next.config.mjs index 397de22..86bfbf5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,12 +1,13 @@ +import withPWAInit from "@ducanh2912/next-pwa"; import withBundleAnalyzer from "@next/bundle-analyzer"; +import createNextIntlPlugin from "next-intl/plugin"; const bundleAnalyzer = withBundleAnalyzer({ enabled: process.env.ANALYZE === "true", }); -import createNextIntlPlugin from "next-intl/plugin"; const withNextIntl = createNextIntlPlugin(); -import withPWAInit from "@ducanh2912/next-pwa"; + const withPWA = withPWAInit({ dest: "public", cacheOnFrontEndNav: true, diff --git a/package.json b/package.json index 2572991..e083ecc 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.3", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/luxon": "^3.4.2", "@typescript-eslint/eslint-plugin": "^8.8.1", "caniuse-lite": "^1.0.30001667", diff --git a/prettier.config.js b/prettier.config.js index fa7765f..d9c7057 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,4 +1,10 @@ // prettier.config.js module.exports = { - plugins: ["prettier-plugin-tailwindcss"], + importOrder: ["^@core/(.*)$", "^@server/(.*)$", "^@ui/(.*)$", "^[./]"], + importOrderSeparation: true, + importOrderSortSpecifiers: true, + plugins: [ + "prettier-plugin-tailwindcss", + "@trivago/prettier-plugin-sort-imports", + ], };