diff --git a/docs/eslint.config.mjs b/docs/eslint.config.mjs index e8828bb64..5b0133130 100644 --- a/docs/eslint.config.mjs +++ b/docs/eslint.config.mjs @@ -1,3 +1,11 @@ import {getPresets} from 'eslint-config-molindo'; +import globals from 'globals'; -export default await getPresets('typescript', 'react', 'tailwind'); +export default (await getPresets('typescript', 'react', 'tailwind')).concat({ + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } +}); diff --git a/docs/package.json b/docs/package.json index dd80f8ea2..60c89d80b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -34,6 +34,7 @@ "autoprefixer": "^10.4.19", "eslint": "^9.11.1", "eslint-config-molindo": "^8.0.0", + "globals": "^15.11.0", "next-sitemap": "^4.2.3", "prettier": "^3.3.3", "typescript": "^5.5.3" diff --git a/docs/src/app/redirect/route.tsx b/docs/src/app/redirect/route.tsx index c5ad6c707..c8bc48023 100644 --- a/docs/src/app/redirect/route.tsx +++ b/docs/src/app/redirect/route.tsx @@ -1,6 +1,6 @@ import {StatusCodes} from 'http-status-codes'; import {NextResponse} from 'next/server'; -import ServerTracker from 'services/ServerTracker'; +import ServerTracker from '@/services/ServerTracker'; export async function GET(request: Request) { const {searchParams} = new URL(request.url); diff --git a/docs/src/components/Details.tsx b/docs/src/components/Details.tsx index f22ccd861..0cdf71d88 100644 --- a/docs/src/components/Details.tsx +++ b/docs/src/components/Details.tsx @@ -1,6 +1,6 @@ import {useMDXComponents} from 'nextra/mdx'; import {ComponentProps, useEffect, useReducer} from 'react'; -import useLocationHash from 'hooks/useLocationHash'; +import useLocationHash from '@/hooks/useLocationHash'; type Props = ComponentProps<'details'>; diff --git a/docs/src/components/Example.tsx b/docs/src/components/Example.tsx index fce309fe4..f69b0c0ec 100644 --- a/docs/src/components/Example.tsx +++ b/docs/src/components/Example.tsx @@ -1,6 +1,6 @@ import {clsx} from 'clsx'; import Image from 'next/image'; -import useLocationHash from 'hooks/useLocationHash'; +import useLocationHash from '@/hooks/useLocationHash'; type Props = { demoLink?: string; diff --git a/docs/src/components/Footer.tsx b/docs/src/components/Footer.tsx index 508ad14ea..7653ba64c 100644 --- a/docs/src/components/Footer.tsx +++ b/docs/src/components/Footer.tsx @@ -1,5 +1,5 @@ import {useRouter} from 'next/router'; -import config from 'config'; +import config from '@/config'; import FooterLink from './FooterLink'; import FooterSeparator from './FooterSeparator'; diff --git a/docs/src/components/PartnerLink.tsx b/docs/src/components/PartnerLink.tsx index 1178f8fbc..d234afe77 100644 --- a/docs/src/components/PartnerLink.tsx +++ b/docs/src/components/PartnerLink.tsx @@ -1,5 +1,5 @@ import {HTMLAttributes} from 'react'; -import BrowserTracker from 'services/BrowserTracker'; +import BrowserTracker from '@/services/BrowserTracker'; type Props = HTMLAttributes & { as?: React.ElementType; diff --git a/docs/src/pages/_app.tsx b/docs/src/pages/_app.tsx index 2cb6d9cc1..668af4bc7 100644 --- a/docs/src/pages/_app.tsx +++ b/docs/src/pages/_app.tsx @@ -2,7 +2,7 @@ import {SpeedInsights} from '@vercel/speed-insights/next'; import {AppProps} from 'next/app'; import {Inter} from 'next/font/google'; import {ReactNode} from 'react'; -import Analytics from 'components/Analytics'; +import Analytics from '@/components/Analytics'; import 'nextra-theme-docs/style.css'; import '../styles.css'; diff --git a/docs/src/pages/api/og-image.tsx b/docs/src/pages/api/og-image.tsx index 5b9ee4361..a756586a7 100644 --- a/docs/src/pages/api/og-image.tsx +++ b/docs/src/pages/api/og-image.tsx @@ -1,5 +1,5 @@ import {ImageResponse} from '@vercel/og'; -import siteConfig from 'config'; +import siteConfig from '@/config'; export const config = { runtime: 'edge' diff --git a/docs/src/pages/blog/index.mdx b/docs/src/pages/blog/index.mdx index ba1e59301..0364cf1d8 100644 --- a/docs/src/pages/blog/index.mdx +++ b/docs/src/pages/blog/index.mdx @@ -1,4 +1,4 @@ -import BlogPostLink from 'components/BlogPostLink'; +import BlogPostLink from '@/components/BlogPostLink'; # next-intl blog diff --git a/docs/src/pages/blog/next-intl-3-0.mdx b/docs/src/pages/blog/next-intl-3-0.mdx index f451b0be0..23c6ccddf 100644 --- a/docs/src/pages/blog/next-intl-3-0.mdx +++ b/docs/src/pages/blog/next-intl-3-0.mdx @@ -2,7 +2,7 @@ title: next-intl 3.0 --- -import PartnerContentLink from 'components/PartnerContentLink'; +import PartnerContentLink from '@/components/PartnerContentLink'; # next-intl 3.0 diff --git a/docs/src/pages/docs/design-principles.mdx b/docs/src/pages/docs/design-principles.mdx index 20564475f..57c078feb 100644 --- a/docs/src/pages/docs/design-principles.mdx +++ b/docs/src/pages/docs/design-principles.mdx @@ -1,4 +1,4 @@ -import PartnerContentLink from 'components/PartnerContentLink'; +import PartnerContentLink from '@/components/PartnerContentLink'; # Design principles diff --git a/docs/src/pages/docs/environments.mdx b/docs/src/pages/docs/environments.mdx index f1e55eac1..a7eca91dd 100644 --- a/docs/src/pages/docs/environments.mdx +++ b/docs/src/pages/docs/environments.mdx @@ -1,5 +1,5 @@ -import Card from 'components/Card'; -import Cards from 'components/Cards'; +import Card from '@/components/Card'; +import Cards from '@/components/Cards'; # Environments diff --git a/docs/src/pages/docs/environments/actions-metadata-route-handlers.mdx b/docs/src/pages/docs/environments/actions-metadata-route-handlers.mdx index 2f2cd3123..01f8eb579 100644 --- a/docs/src/pages/docs/environments/actions-metadata-route-handlers.mdx +++ b/docs/src/pages/docs/environments/actions-metadata-route-handlers.mdx @@ -1,5 +1,5 @@ -import Callout from 'components/Callout'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Details from '@/components/Details'; # Server Actions, Metadata & Route Handlers diff --git a/docs/src/pages/docs/environments/error-files.mdx b/docs/src/pages/docs/environments/error-files.mdx index d2bef6eed..90da28c7c 100644 --- a/docs/src/pages/docs/environments/error-files.mdx +++ b/docs/src/pages/docs/environments/error-files.mdx @@ -1,4 +1,4 @@ -import Callout from 'components/Callout'; +import Callout from '@/components/Callout'; # Internationalization in Next.js error files diff --git a/docs/src/pages/docs/environments/mdx.mdx b/docs/src/pages/docs/environments/mdx.mdx index f044a2965..f3364dfc5 100644 --- a/docs/src/pages/docs/environments/mdx.mdx +++ b/docs/src/pages/docs/environments/mdx.mdx @@ -1,5 +1,5 @@ -import Details from 'components/Details'; -import PartnerContentLink from 'components/PartnerContentLink'; +import Details from '@/components/Details'; +import PartnerContentLink from '@/components/PartnerContentLink'; # Markdown (MDX) diff --git a/docs/src/pages/docs/environments/runtime-requirements.mdx b/docs/src/pages/docs/environments/runtime-requirements.mdx index e3bf6d367..2e74bd33f 100644 --- a/docs/src/pages/docs/environments/runtime-requirements.mdx +++ b/docs/src/pages/docs/environments/runtime-requirements.mdx @@ -1,4 +1,4 @@ -import Callout from 'components/Callout'; +import Callout from '@/components/Callout'; # Runtime requirements diff --git a/docs/src/pages/docs/environments/server-client-components.mdx b/docs/src/pages/docs/environments/server-client-components.mdx index 7ec835a83..0c8a1dbca 100644 --- a/docs/src/pages/docs/environments/server-client-components.mdx +++ b/docs/src/pages/docs/environments/server-client-components.mdx @@ -1,5 +1,5 @@ -import Callout from 'components/Callout'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Details from '@/components/Details'; # Internationalization of Server & Client Components @@ -170,7 +170,7 @@ If you implement a locale switcher as an interactive select, you can keep intern ```tsx filename="LocaleSwitcher.tsx" import {useLocale, useTranslations} from 'next-intl'; -import {locales} from 'config'; +import {locales} from '@/config'; // A Client Component that registers an event listener for // the `change` event of the select, uses `useRouter` diff --git a/docs/src/pages/docs/getting-started.mdx b/docs/src/pages/docs/getting-started.mdx index 49eb66670..d4755b7a8 100644 --- a/docs/src/pages/docs/getting-started.mdx +++ b/docs/src/pages/docs/getting-started.mdx @@ -1,7 +1,7 @@ -import Callout from 'components/Callout'; -import Chip from 'components/Chip'; -import Card from 'components/Card'; -import Cards from 'components/Cards'; +import Callout from '@/components/Callout'; +import Chip from '@/components/Chip'; +import Card from '@/components/Card'; +import Cards from '@/components/Cards'; # Next.js internationalization (i18n) diff --git a/docs/src/pages/docs/getting-started/app-router.mdx b/docs/src/pages/docs/getting-started/app-router.mdx index 58d9c3953..2b070413b 100644 --- a/docs/src/pages/docs/getting-started/app-router.mdx +++ b/docs/src/pages/docs/getting-started/app-router.mdx @@ -1,8 +1,8 @@ -import Card from 'components/Card'; -import Cards from 'components/Cards'; -import Callout from 'components/Callout'; -import Steps from 'components/Steps'; -import Details from 'components/Details'; +import Card from '@/components/Card'; +import Cards from '@/components/Cards'; +import Callout from '@/components/Callout'; +import Steps from '@/components/Steps'; +import Details from '@/components/Details'; # Next.js App Router Internationalization (i18n) diff --git a/docs/src/pages/docs/getting-started/app-router/with-i18n-routing.mdx b/docs/src/pages/docs/getting-started/app-router/with-i18n-routing.mdx index 8c75c390b..6456eeb48 100644 --- a/docs/src/pages/docs/getting-started/app-router/with-i18n-routing.mdx +++ b/docs/src/pages/docs/getting-started/app-router/with-i18n-routing.mdx @@ -1,7 +1,7 @@ import {Tabs} from 'nextra/components'; -import Callout from 'components/Callout'; -import Steps from 'components/Steps'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Steps from '@/components/Steps'; +import Details from '@/components/Details'; # App Router setup with i18n routing diff --git a/docs/src/pages/docs/getting-started/app-router/without-i18n-routing.mdx b/docs/src/pages/docs/getting-started/app-router/without-i18n-routing.mdx index 870e4fbcd..3b43b6bc3 100644 --- a/docs/src/pages/docs/getting-started/app-router/without-i18n-routing.mdx +++ b/docs/src/pages/docs/getting-started/app-router/without-i18n-routing.mdx @@ -1,7 +1,7 @@ import {Tabs} from 'nextra/components'; -import Callout from 'components/Callout'; -import Steps from 'components/Steps'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Steps from '@/components/Steps'; +import Details from '@/components/Details'; # App Router setup without i18n routing diff --git a/docs/src/pages/docs/getting-started/pages-router.mdx b/docs/src/pages/docs/getting-started/pages-router.mdx index f5d9a60bc..4c7a5a056 100644 --- a/docs/src/pages/docs/getting-started/pages-router.mdx +++ b/docs/src/pages/docs/getting-started/pages-router.mdx @@ -1,5 +1,5 @@ import {Tabs} from 'nextra/components'; -import Callout from 'components/Callout'; +import Callout from '@/components/Callout'; # Next.js Pages Router internationalization (i18n) diff --git a/docs/src/pages/docs/routing.mdx b/docs/src/pages/docs/routing.mdx index 84f0b1c4f..051729003 100644 --- a/docs/src/pages/docs/routing.mdx +++ b/docs/src/pages/docs/routing.mdx @@ -1,7 +1,7 @@ -import Details from 'components/Details'; -import Card from 'components/Card'; -import Cards from 'components/Cards'; -import Callout from 'components/Callout'; +import Details from '@/components/Details'; +import Card from '@/components/Card'; +import Cards from '@/components/Cards'; +import Callout from '@/components/Callout'; # Next.js internationalized routing diff --git a/docs/src/pages/docs/routing/middleware.mdx b/docs/src/pages/docs/routing/middleware.mdx index 3936c35a3..5ce9a6fae 100644 --- a/docs/src/pages/docs/routing/middleware.mdx +++ b/docs/src/pages/docs/routing/middleware.mdx @@ -1,5 +1,5 @@ -import Callout from 'components/Callout'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Details from '@/components/Details'; # Middleware diff --git a/docs/src/pages/docs/routing/navigation.mdx b/docs/src/pages/docs/routing/navigation.mdx index 2fde2c158..c277ce2d6 100644 --- a/docs/src/pages/docs/routing/navigation.mdx +++ b/docs/src/pages/docs/routing/navigation.mdx @@ -1,5 +1,5 @@ -import Callout from 'components/Callout'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Details from '@/components/Details'; # Navigation APIs diff --git a/docs/src/pages/docs/usage.mdx b/docs/src/pages/docs/usage.mdx index 01e5fdae6..24ea55817 100644 --- a/docs/src/pages/docs/usage.mdx +++ b/docs/src/pages/docs/usage.mdx @@ -1,6 +1,6 @@ -import Callout from 'components/Callout'; -import Card from 'components/Card'; -import Cards from 'components/Cards'; +import Callout from '@/components/Callout'; +import Card from '@/components/Card'; +import Cards from '@/components/Cards'; # Usage guide diff --git a/docs/src/pages/docs/usage/configuration.mdx b/docs/src/pages/docs/usage/configuration.mdx index 97df3d0ca..9c910064c 100644 --- a/docs/src/pages/docs/usage/configuration.mdx +++ b/docs/src/pages/docs/usage/configuration.mdx @@ -1,7 +1,7 @@ -import PartnerContentLink from 'components/PartnerContentLink'; -import Callout from 'components/Callout'; +import PartnerContentLink from '@/components/PartnerContentLink'; +import Callout from '@/components/Callout'; import {Tabs} from 'nextra/components'; -import Details from 'components/Details'; +import Details from '@/components/Details'; # Global configuration diff --git a/docs/src/pages/docs/usage/dates-times.mdx b/docs/src/pages/docs/usage/dates-times.mdx index fd0d8658b..a8627c853 100644 --- a/docs/src/pages/docs/usage/dates-times.mdx +++ b/docs/src/pages/docs/usage/dates-times.mdx @@ -1,6 +1,6 @@ -import Callout from 'components/Callout'; -import PartnerContentLink from 'components/PartnerContentLink'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import PartnerContentLink from '@/components/PartnerContentLink'; +import Details from '@/components/Details'; # Date and time formatting diff --git a/docs/src/pages/docs/usage/lists.mdx b/docs/src/pages/docs/usage/lists.mdx index c034ccac6..94ebe8344 100644 --- a/docs/src/pages/docs/usage/lists.mdx +++ b/docs/src/pages/docs/usage/lists.mdx @@ -1,5 +1,5 @@ -import Callout from 'components/Callout'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import Details from '@/components/Details'; # List formatting diff --git a/docs/src/pages/docs/usage/messages.mdx b/docs/src/pages/docs/usage/messages.mdx index 632fb14b5..f2d5233c6 100644 --- a/docs/src/pages/docs/usage/messages.mdx +++ b/docs/src/pages/docs/usage/messages.mdx @@ -1,6 +1,6 @@ -import Callout from 'components/Callout'; -import PartnerContentLink from 'components/PartnerContentLink'; -import Details from 'components/Details'; +import Callout from '@/components/Callout'; +import PartnerContentLink from '@/components/PartnerContentLink'; +import Details from '@/components/Details'; # Rendering i18n messages diff --git a/docs/src/pages/docs/usage/numbers.mdx b/docs/src/pages/docs/usage/numbers.mdx index cc3edb159..fb8dbb287 100644 --- a/docs/src/pages/docs/usage/numbers.mdx +++ b/docs/src/pages/docs/usage/numbers.mdx @@ -1,5 +1,5 @@ -import Callout from 'components/Callout'; -import PartnerContentLink from 'components/PartnerContentLink'; +import Callout from '@/components/Callout'; +import PartnerContentLink from '@/components/PartnerContentLink'; # Number formatting diff --git a/docs/src/pages/docs/workflows.mdx b/docs/src/pages/docs/workflows.mdx index 4dc928670..746ad13d5 100644 --- a/docs/src/pages/docs/workflows.mdx +++ b/docs/src/pages/docs/workflows.mdx @@ -1,5 +1,5 @@ -import Card from 'components/Card'; -import Cards from 'components/Cards'; +import Card from '@/components/Card'; +import Cards from '@/components/Cards'; # Workflows & integrations diff --git a/docs/src/pages/docs/workflows/localization-management.mdx b/docs/src/pages/docs/workflows/localization-management.mdx index 532b1f73c..6182875c2 100644 --- a/docs/src/pages/docs/workflows/localization-management.mdx +++ b/docs/src/pages/docs/workflows/localization-management.mdx @@ -1,6 +1,6 @@ -import PartnerContentLink from 'components/PartnerContentLink'; -import Callout from 'components/Callout'; -import Screenshot from 'components/Screenshot'; +import PartnerContentLink from '@/components/PartnerContentLink'; +import Callout from '@/components/Callout'; +import Screenshot from '@/components/Screenshot'; import Image from 'next/image'; # Localization management with Crowdin diff --git a/docs/src/pages/docs/workflows/storybook.mdx b/docs/src/pages/docs/workflows/storybook.mdx index 8a90e0fa7..a83b32a7a 100644 --- a/docs/src/pages/docs/workflows/storybook.mdx +++ b/docs/src/pages/docs/workflows/storybook.mdx @@ -1,4 +1,4 @@ -import Callout from 'components/Callout'; +import Callout from '@/components/Callout'; import Image from 'next/image'; # Storybook integration for `next-intl` diff --git a/docs/src/pages/docs/workflows/typescript.mdx b/docs/src/pages/docs/workflows/typescript.mdx index e732bb79d..ca2124cf7 100644 --- a/docs/src/pages/docs/workflows/typescript.mdx +++ b/docs/src/pages/docs/workflows/typescript.mdx @@ -1,4 +1,4 @@ -import Callout from 'components/Callout'; +import Callout from '@/components/Callout'; # TypeScript integration diff --git a/docs/src/pages/examples.mdx b/docs/src/pages/examples.mdx index 5f4f7ee38..be30a340f 100644 --- a/docs/src/pages/examples.mdx +++ b/docs/src/pages/examples.mdx @@ -1,4 +1,4 @@ -import Example from 'components/Example'; +import Example from '@/components/Example'; # Examples diff --git a/docs/src/pages/index.mdx b/docs/src/pages/index.mdx index 3f4e3c67a..d219d0aaf 100644 --- a/docs/src/pages/index.mdx +++ b/docs/src/pages/index.mdx @@ -2,16 +2,16 @@ title: next-intl --- -import Callout from 'components/Callout'; -import CodeSnippets from 'components/CodeSnippets'; -import FeaturePanel from 'components/FeaturePanel'; -import Hero from 'components/Hero'; -import Link from 'components/Link'; -import LinkButton from 'components/LinkButton'; -import PartnerBanner from 'components/PartnerBanner'; -import Section from 'components/Section'; -import UserTestimonial from 'components/UserTestimonial'; -import GetStartedBackground from 'components/GetStartedBackground'; +import Callout from '@/components/Callout'; +import CodeSnippets from '@/components/CodeSnippets'; +import FeaturePanel from '@/components/FeaturePanel'; +import Hero from '@/components/Hero'; +import Link from '@/components/Link'; +import LinkButton from '@/components/LinkButton'; +import PartnerBanner from '@/components/PartnerBanner'; +import Section from '@/components/Section'; +import UserTestimonial from '@/components/UserTestimonial'; +import GetStartedBackground from '@/components/GetStartedBackground';
diff --git a/docs/src/theme.config.tsx b/docs/src/theme.config.tsx index 1b8386889..9e3bc93b0 100644 --- a/docs/src/theme.config.tsx +++ b/docs/src/theme.config.tsx @@ -6,11 +6,11 @@ import { useConfig } from 'nextra-theme-docs'; import {ComponentProps} from 'react'; -import AlgoliaSearch from 'components/AlgoliaSearch'; -import Footer from 'components/Footer'; -import Logo from 'components/Logo'; -import PartnerSidebar from 'components/PartnerSidebar'; -import Pre from 'components/Pre'; +import AlgoliaSearch from '@/components/AlgoliaSearch'; +import Footer from '@/components/Footer'; +import Logo from '@/components/Logo'; +import PartnerSidebar from '@/components/PartnerSidebar'; +import Pre from '@/components/Pre'; import config from './config'; export const TITLE_TEMPLATE_SUFFIX = ' – ' + config.description; diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 0d3666ebf..1ea63cb9a 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "eslint-config-molindo/tsconfig.json", "compilerOptions": { - "baseUrl": "src", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -19,7 +18,10 @@ "name": "next" } ], - "strict": true + "strict": true, + "paths": { + "@/*": ["./src/*"] + } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 11450f746..13418f1e5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,6 +123,9 @@ importers: eslint-config-molindo: specifier: ^8.0.0 version: 8.0.0(@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(jest@29.7.0(@types/node@20.16.11))(tailwindcss@3.4.14)(typescript@5.6.3)(vitest@2.1.3(@edge-runtime/vm@4.0.3)(@types/node@20.16.11)(jsdom@25.0.1)(terser@5.35.0)) + globals: + specifier: ^15.11.0 + version: 15.11.0 next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@14.2.15(@babel/core@7.25.8)(@playwright/test@1.48.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -2597,7 +2600,7 @@ packages: '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} - engines: {'0': node >=0.10.0} + engines: {node: '>=0.10.0'} '@expo/cli@0.4.11': resolution: {integrity: sha512-L9Ci9RBh0aPFEDF1AjDYPk54OgeUJIKzxF3lRgITm+lQpI3IEKjAc9LaYeQeO1mlZMUQmPkHArF8iyz1eOeVoQ==}