From 6ce23a6e971b064292970fc4df90cc69cdb59a95 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 21:26:44 +0100 Subject: [PATCH] fix(deps): update nextjs monorepo to v16 (major) (#4363) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> Co-authored-by: Meier Lukas --- apps/nextjs/next.config.ts | 12 +- apps/nextjs/package.json | 3 +- .../boards/(content)/_header-actions.tsx | 2 +- .../init/_steps/finish/init-finish.tsx | 2 +- .../src/app/[locale]/manage/apps/page.tsx | 3 +- .../_components/board-card-menu-dropdown.tsx | 2 +- .../src/app/[locale]/manage/boards/page.tsx | 3 +- .../edit/[id]/_integration-edit-form.tsx | 2 +- .../new/_integration-new-dropdown.tsx | 3 +- .../new/_integration-new-form.tsx | 2 +- .../app/[locale]/manage/integrations/page.tsx | 3 +- .../src/app/[locale]/manage/medias/page.tsx | 3 +- apps/nextjs/src/app/[locale]/manage/page.tsx | 2 +- .../[locale]/manage/search-engines/_form.tsx | 2 +- .../[locale]/manage/search-engines/page.tsx | 3 +- .../tools/certificates/hostnames/page.tsx | 2 +- .../manage/tools/certificates/page.tsx | 2 +- .../[locale]/manage/tools/docker/error.tsx | 2 +- .../kubernetes/cluster-dashboard/error.tsx | 2 +- .../resource-tile/resource-tile.tsx | 2 +- .../manage/users/_components/user-list.tsx | 3 +- .../create/_components/stepper-navigation.tsx | 2 +- .../manage/users/groups/[id]/_navigation.tsx | 3 +- .../groups/[id]/_reserved-group-alert.tsx | 2 +- .../manage/users/groups/[id]/layout.tsx | 2 +- .../manage/users/groups/[id]/members/page.tsx | 3 +- .../manage/users/groups/_groups-table.tsx | 3 +- .../app/[locale]/manage/users/groups/page.tsx | 2 +- .../components/access/group-access-form.tsx | 2 +- .../components/access/user-access-form.tsx | 3 +- apps/nextjs/src/components/layout/header.tsx | 2 +- .../src/components/layout/header/button.tsx | 3 +- .../src/components/layout/navigation-link.tsx | 3 +- .../src/components/user-avatar-menu.tsx | 2 +- apps/nextjs/src/{middleware.ts => proxy.ts} | 24 +- packages/api/package.json | 2 +- packages/auth/package.json | 2 +- packages/common/package.json | 2 +- packages/forms-collection/package.json | 1 + .../forms-collection/src/new-app/_form.tsx | 2 +- packages/modals-collection/package.json | 2 +- .../src/invites/invite-copy-modal.tsx | 2 +- packages/old-import/package.json | 2 +- packages/settings/package.json | 2 +- packages/spotlight/package.json | 2 +- .../actions/items/children-action-item.tsx | 3 +- .../actions/items/group-action-item.tsx | 2 +- packages/translation/package.json | 2 +- packages/ui/package.json | 2 +- packages/ui/src/components/index.tsx | 1 + packages/ui/src/components/link.tsx | 5 + .../ui/src/components/table-pagination.tsx | 3 +- packages/widgets/package.json | 2 +- .../widgets/src/_inputs/widget-app-input.tsx | 2 +- .../widgets/src/errors/base-component.tsx | 2 +- .../widgets/src/widget-integration-select.tsx | 2 +- pnpm-lock.yaml | 470 +++++++++--------- tooling/eslint/package.json | 2 +- 58 files changed, 313 insertions(+), 320 deletions(-) rename apps/nextjs/src/{middleware.ts => proxy.ts} (64%) create mode 100644 packages/ui/src/components/link.tsx diff --git a/apps/nextjs/next.config.ts b/apps/nextjs/next.config.ts index be0798daa..1723b2e3a 100644 --- a/apps/nextjs/next.config.ts +++ b/apps/nextjs/next.config.ts @@ -20,8 +20,8 @@ const withNextIntl = createNextIntlPlugin({ const nextConfig: NextConfig = { output: "standalone", reactStrictMode: true, - /** We already do linting and typechecking as separate tasks in CI */ - eslint: { ignoreDuringBuilds: true }, + reactCompiler: true, + /** We already do typechecking as separate tasks in CI */ typescript: { ignoreBuildErrors: true }, /** * dockerode is required in the external server packages because of https://github.com/homarr-labs/homarr/issues/612 @@ -29,10 +29,16 @@ const nextConfig: NextConfig = { serverExternalPackages: ["dockerode"], experimental: { optimizePackageImports: ["@mantine/core", "@mantine/hooks", "@tabler/icons-react"], + turbopackFileSystemCacheForDev: true, }, transpilePackages: ["@homarr/ui", "@homarr/notifications", "@homarr/modals", "@homarr/spotlight", "@homarr/widgets"], images: { - domains: ["cdn.jsdelivr.net"], + localPatterns: [ + { + pathname: "/**", + search: "", + }, + ], }, // eslint-disable-next-line @typescript-eslint/require-await,no-restricted-syntax async headers() { diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index d0f73073a..41f1e4d01 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -68,6 +68,7 @@ "@xterm/addon-canvas": "^0.7.0", "@xterm/addon-fit": "0.10.0", "@xterm/xterm": "^5.5.0", + "babel-plugin-react-compiler": "^1.0.0", "chroma-js": "^3.1.2", "clsx": "^2.1.1", "dayjs": "^1.11.18", @@ -76,7 +77,7 @@ "glob": "^11.0.3", "jotai": "^2.15.0", "mantine-react-table": "2.0.0-beta.9", - "next": "15.5.6", + "next": "16.0.1", "postcss-preset-mantine": "^1.18.0", "prismjs": "^1.30.0", "react": "19.2.0", diff --git a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx index ce6a24c28..9ee773d16 100644 --- a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx +++ b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx @@ -1,7 +1,6 @@ "use client"; import { useCallback, useEffect } from "react"; -import Link from "next/link"; import { useRouter } from "next/navigation"; import { Group, Menu, ScrollArea } from "@mantine/core"; import { useHotkeys } from "@mantine/hooks"; @@ -29,6 +28,7 @@ import { useConfirmModal, useModalAction } from "@homarr/modals"; import { AppSelectModal } from "@homarr/modals-collection"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { useItemActions } from "~/components/board/items/item-actions"; import { ItemSelectModal } from "~/components/board/items/item-select-modal"; diff --git a/apps/nextjs/src/app/[locale]/init/_steps/finish/init-finish.tsx b/apps/nextjs/src/app/[locale]/init/_steps/finish/init-finish.tsx index d60da53ab..288b9adae 100644 --- a/apps/nextjs/src/app/[locale]/init/_steps/finish/init-finish.tsx +++ b/apps/nextjs/src/app/[locale]/init/_steps/finish/init-finish.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import type { MantineColor } from "@mantine/core"; import { Button, Card, Stack, Text } from "@mantine/core"; import { IconBook2, IconCategoryPlus, IconLayoutDashboard, IconMailForward } from "@tabler/icons-react"; @@ -8,6 +7,7 @@ import { getMantineColor } from "@homarr/common"; import { db } from "@homarr/db"; import { createDocumentationLink } from "@homarr/definitions"; import { getScopedI18n } from "@homarr/translation/server"; +import { Link } from "@homarr/ui"; import type { TablerIcon } from "@homarr/ui"; export const InitFinish = async () => { diff --git a/apps/nextjs/src/app/[locale]/manage/apps/page.tsx b/apps/nextjs/src/app/[locale]/manage/apps/page.tsx index f94cff54f..27ab01fb5 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/page.tsx @@ -1,5 +1,4 @@ import { Fragment } from "react"; -import Link from "next/link"; import { redirect } from "next/navigation"; import { ActionIcon, ActionIconGroup, Anchor, Avatar, Card, Group, Stack, Text, Title } from "@mantine/core"; import { IconBox, IconPencil } from "@tabler/icons-react"; @@ -10,7 +9,7 @@ import { api } from "@homarr/api/server"; import { auth } from "@homarr/auth/next"; import type { inferSearchParamsFromSchema } from "@homarr/common/types"; import { getI18n, getScopedI18n } from "@homarr/translation/server"; -import { SearchInput, TablePagination } from "@homarr/ui"; +import { Link, SearchInput, TablePagination } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { MobileAffixButton } from "~/components/manage/mobile-affix-button"; diff --git a/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx b/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx index 68ecf3a57..4c918f9ef 100644 --- a/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx +++ b/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx @@ -1,7 +1,6 @@ "use client"; import { useCallback } from "react"; -import Link from "next/link"; import { Menu } from "@mantine/core"; import { IconCopy, IconDeviceMobile, IconHome, IconSettings, IconTrash } from "@tabler/icons-react"; @@ -12,6 +11,7 @@ import { revalidatePathActionAsync } from "@homarr/common/client"; import { useConfirmModal, useModalAction } from "@homarr/modals"; import { DuplicateBoardModal } from "@homarr/modals-collection"; import { useScopedI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { useBoardPermissions } from "~/components/board/permissions/client"; diff --git a/apps/nextjs/src/app/[locale]/manage/boards/page.tsx b/apps/nextjs/src/app/[locale]/manage/boards/page.tsx index f5beca147..9c0a28344 100644 --- a/apps/nextjs/src/app/[locale]/manage/boards/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/boards/page.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import { ActionIcon, Badge, @@ -21,7 +20,7 @@ import type { RouterOutputs } from "@homarr/api"; import { api } from "@homarr/api/server"; import { auth } from "@homarr/auth/next"; import { getScopedI18n } from "@homarr/translation/server"; -import { UserAvatar } from "@homarr/ui"; +import { Link, UserAvatar } from "@homarr/ui"; import { getBoardPermissionsAsync } from "~/components/board/permissions/server"; import { ManageContainer } from "~/components/manage/manage-container"; diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/_integration-edit-form.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/_integration-edit-form.tsx index 9dd9dbceb..05c8ec845 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/_integration-edit-form.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/_integration-edit-form.tsx @@ -1,7 +1,6 @@ "use client"; import { useState } from "react"; -import Link from "next/link"; import { useRouter } from "next/navigation"; import { Alert, Anchor, Button, ButtonGroup, Fieldset, Group, Stack, Text, TextInput } from "@mantine/core"; import { IconInfoCircle, IconPencil, IconPlus, IconUnlink } from "@tabler/icons-react"; @@ -17,6 +16,7 @@ import { useConfirmModal, useModalAction } from "@homarr/modals"; import { AppSelectModal } from "@homarr/modals-collection"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { integrationUpdateSchema } from "@homarr/validation/integration"; import { SecretCard } from "../../_components/secrets/integration-secret-card"; diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx index dd8b0a5de..25333e127 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx @@ -2,13 +2,12 @@ import type { ChangeEvent } from "react"; import React, { useMemo, useState } from "react"; -import Link from "next/link"; import { Flex, Group, Menu, ScrollArea, Text, TextInput } from "@mantine/core"; import { IconSearch } from "@tabler/icons-react"; import { getIntegrationName, integrationKinds } from "@homarr/definitions"; import { useI18n } from "@homarr/translation/client"; -import { IntegrationAvatar } from "@homarr/ui"; +import { IntegrationAvatar, Link } from "@homarr/ui"; interface IntegrationCreateDropdownContentProps { enableMockIntegration: boolean; diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx index 51de06b72..1152174a4 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx @@ -1,7 +1,6 @@ "use client"; import { startTransition, useState } from "react"; -import Link from "next/link"; import { useRouter } from "next/navigation"; import { Alert, @@ -36,6 +35,7 @@ import type { GetInputPropsReturnType, UseFormReturnType } from "@homarr/form"; import { useZodForm } from "@homarr/form"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { appHrefSchema } from "@homarr/validation/app"; import { integrationCreateSchema } from "@homarr/validation/integration"; diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx index 48ead515d..1fe3a83e2 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx @@ -1,6 +1,5 @@ import { Fragment } from "react"; import type { PropsWithChildren } from "react"; -import Link from "next/link"; import { redirect } from "next/navigation"; import { AccordionControl, @@ -36,7 +35,7 @@ import { objectEntries } from "@homarr/common"; import type { IntegrationKind } from "@homarr/definitions"; import { getIntegrationName } from "@homarr/definitions"; import { getScopedI18n } from "@homarr/translation/server"; -import { CountBadge, IntegrationAvatar } from "@homarr/ui"; +import { CountBadge, IntegrationAvatar, Link } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; diff --git a/apps/nextjs/src/app/[locale]/manage/medias/page.tsx b/apps/nextjs/src/app/[locale]/manage/medias/page.tsx index 9bdbf22c7..b14ceb531 100644 --- a/apps/nextjs/src/app/[locale]/manage/medias/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/medias/page.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import { notFound } from "next/navigation"; import { ActionIcon, @@ -25,7 +24,7 @@ import { humanFileSize } from "@homarr/common"; import type { inferSearchParamsFromSchema } from "@homarr/common/types"; import { createLocalImageUrl } from "@homarr/icons/local"; import { getI18n } from "@homarr/translation/server"; -import { SearchInput, TablePagination, UserAvatar } from "@homarr/ui"; +import { Link, SearchInput, TablePagination, UserAvatar } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; diff --git a/apps/nextjs/src/app/[locale]/manage/page.tsx b/apps/nextjs/src/app/[locale]/manage/page.tsx index a77794f92..256eaddb5 100644 --- a/apps/nextjs/src/app/[locale]/manage/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/page.tsx @@ -1,10 +1,10 @@ import type { Metadata } from "next"; -import Link from "next/link"; import { Card, Group, SimpleGrid, Space, Stack, Text } from "@mantine/core"; import { IconArrowRight } from "@tabler/icons-react"; import { api } from "@homarr/api/server"; import { getScopedI18n } from "@homarr/translation/server"; +import { Link } from "@homarr/ui"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { createMetaTitle } from "~/metadata"; diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx index c41b653ed..5a5c5b705 100644 --- a/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx +++ b/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx @@ -1,6 +1,5 @@ "use client"; -import Link from "next/link"; import type { SegmentedControlItem } from "@mantine/core"; import { Button, Fieldset, Grid, Group, SegmentedControl, Stack, Textarea, TextInput } from "@mantine/core"; import { WidgetIntegrationSelect } from "node_modules/@homarr/widgets/src/widget-integration-select"; @@ -12,6 +11,7 @@ import { useZodForm } from "@homarr/form"; import { IconPicker } from "@homarr/forms-collection"; import type { TranslationFunction } from "@homarr/translation"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { searchEngineManageSchema } from "@homarr/validation/search-engine"; type FormType = z.infer; diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx index a3faa2811..ce2500d02 100644 --- a/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import { redirect } from "next/navigation"; import { ActionIcon, ActionIconGroup, Anchor, Avatar, Card, Group, Stack, Text, Title } from "@mantine/core"; import { IconPencil, IconSearch } from "@tabler/icons-react"; @@ -9,7 +8,7 @@ import { api } from "@homarr/api/server"; import { auth } from "@homarr/auth/next"; import type { inferSearchParamsFromSchema } from "@homarr/common/types"; import { getI18n, getScopedI18n } from "@homarr/translation/server"; -import { SearchInput, TablePagination } from "@homarr/ui"; +import { Link, SearchInput, TablePagination } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { MobileAffixButton } from "~/components/manage/mobile-affix-button"; diff --git a/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/page.tsx b/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/page.tsx index 5482b27a0..2b9aa6ac6 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/page.tsx @@ -1,5 +1,4 @@ import { X509Certificate } from "node:crypto"; -import Link from "next/link"; import { notFound } from "next/navigation"; import { Button, @@ -19,6 +18,7 @@ import { IconCertificateOff } from "@tabler/icons-react"; import { auth } from "@homarr/auth/next"; import { getTrustedCertificateHostnamesAsync } from "@homarr/certificates/server"; import { getI18n } from "@homarr/translation/server"; +import { Link } from "@homarr/ui"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { NoResults } from "~/components/no-results"; diff --git a/apps/nextjs/src/app/[locale]/manage/tools/certificates/page.tsx b/apps/nextjs/src/app/[locale]/manage/tools/certificates/page.tsx index 97aca1c59..fc9a29dd6 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/certificates/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/certificates/page.tsx @@ -1,5 +1,4 @@ import { X509Certificate } from "node:crypto"; -import Link from "next/link"; import { notFound } from "next/navigation"; import { Button, Card, Group, SimpleGrid, Stack, Text, Title } from "@mantine/core"; import { IconAlertTriangle, IconCertificate, IconCertificateOff } from "@tabler/icons-react"; @@ -10,6 +9,7 @@ import { loadCustomRootCertificatesAsync } from "@homarr/certificates/server"; import { getMantineColor } from "@homarr/common"; import type { SupportedLanguage } from "@homarr/translation"; import { getI18n } from "@homarr/translation/server"; +import { Link } from "@homarr/ui"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { NoResults } from "~/components/no-results"; diff --git a/apps/nextjs/src/app/[locale]/manage/tools/docker/error.tsx b/apps/nextjs/src/app/[locale]/manage/tools/docker/error.tsx index 4fe1ae7b0..47a672e13 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/docker/error.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/docker/error.tsx @@ -1,10 +1,10 @@ "use client"; -import Link from "next/link"; import { Anchor, Center, Stack, Text } from "@mantine/core"; import { IconShipOff } from "@tabler/icons-react"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; export default function DockerErrorPage() { const t = useI18n(); diff --git a/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/error.tsx b/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/error.tsx index 4baae5ace..7ca5b359a 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/error.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/error.tsx @@ -1,10 +1,10 @@ "use client"; -import Link from "next/link"; import { Anchor, Center, Stack, Text } from "@mantine/core"; import { IconCubeOff } from "@tabler/icons-react"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; export default function KubernetesErrorPage() { const t = useI18n(); diff --git a/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/resource-tile/resource-tile.tsx b/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/resource-tile/resource-tile.tsx index f1ad19df8..d2405fcf7 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/resource-tile/resource-tile.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/kubernetes/cluster-dashboard/resource-tile/resource-tile.tsx @@ -1,11 +1,11 @@ import React from "react"; import Image from "next/image"; -import Link from "next/link"; import { Card, Group, Text } from "@mantine/core"; import { IconArrowRight } from "@tabler/icons-react"; import type { KubernetesLabelResourceType } from "@homarr/definitions"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import classes from "./resource-tile.module.css"; diff --git a/apps/nextjs/src/app/[locale]/manage/users/_components/user-list.tsx b/apps/nextjs/src/app/[locale]/manage/users/_components/user-list.tsx index 9bb51106f..22f4d1b88 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/_components/user-list.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/_components/user-list.tsx @@ -1,7 +1,6 @@ "use client"; import { useMemo } from "react"; -import Link from "next/link"; import { Anchor, Button, Group, Text, Title, Tooltip } from "@mantine/core"; import { IconCheck } from "@tabler/icons-react"; import type { MRT_ColumnDef } from "mantine-react-table"; @@ -10,7 +9,7 @@ import { MantineReactTable } from "mantine-react-table"; import type { RouterOutputs } from "@homarr/api"; import { clientApi } from "@homarr/api/client"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; -import { UserAvatar } from "@homarr/ui"; +import { Link, UserAvatar } from "@homarr/ui"; import { useTranslatedMantineReactTable } from "@homarr/ui/hooks"; interface UserListComponentProps { diff --git a/apps/nextjs/src/app/[locale]/manage/users/create/_components/stepper-navigation.tsx b/apps/nextjs/src/app/[locale]/manage/users/create/_components/stepper-navigation.tsx index 9a277f8b1..24d003a84 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/create/_components/stepper-navigation.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/create/_components/stepper-navigation.tsx @@ -1,8 +1,8 @@ -import Link from "next/link"; import { Button, Card, Group } from "@mantine/core"; import { IconArrowBackUp, IconArrowLeft, IconArrowRight, IconRotate } from "@tabler/icons-react"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; interface StepperNavigationComponentProps { hasPrevious: boolean; diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_navigation.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_navigation.tsx index 8b7f0004c..d04dde41c 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_navigation.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_navigation.tsx @@ -1,10 +1,11 @@ "use client"; import type { ReactNode } from "react"; -import Link from "next/link"; import { usePathname } from "next/navigation"; import { NavLink } from "@mantine/core"; +import { Link } from "@homarr/ui"; + interface NavigationLinkProps { href: string; label: string; diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_reserved-group-alert.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_reserved-group-alert.tsx index 07d5dd55f..162100d5c 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_reserved-group-alert.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_reserved-group-alert.tsx @@ -1,11 +1,11 @@ "use client"; -import Link from "next/link"; import { Alert, Anchor } from "@mantine/core"; import { IconExclamationCircle } from "@tabler/icons-react"; import { createDocumentationLink } from "@homarr/definitions"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; export const ReservedGroupAlert = () => { const t = useI18n(); diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx index d78a53fe5..fd6766417 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx @@ -1,10 +1,10 @@ import type { PropsWithChildren } from "react"; -import Link from "next/link"; import { Button, Grid, GridCol, Group, Stack, Text, Title } from "@mantine/core"; import { IconId, IconLock, IconSettings, IconUsersGroup } from "@tabler/icons-react"; import { api } from "@homarr/api/server"; import { getI18n, getScopedI18n } from "@homarr/translation/server"; +import { Link } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { NavigationLink } from "./_navigation"; diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx index 965bb61ed..f0a6d879a 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import { notFound } from "next/navigation"; import { Alert, Anchor, Center, Group, Stack, Table, TableTbody, TableTd, TableTr, Text, Title } from "@mantine/core"; import { IconExclamationCircle } from "@tabler/icons-react"; @@ -10,7 +9,7 @@ import { auth } from "@homarr/auth/next"; import { isProviderEnabled } from "@homarr/auth/server"; import { everyoneGroup } from "@homarr/definitions"; import { getI18n, getScopedI18n } from "@homarr/translation/server"; -import { SearchInput, UserAvatar } from "@homarr/ui"; +import { Link, SearchInput, UserAvatar } from "@homarr/ui"; import { ReservedGroupAlert } from "../_reserved-group-alert"; import { AddGroupMember } from "./_add-group-member"; diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx index 95d5bdfaa..2dcfb21a2 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx @@ -2,7 +2,6 @@ import type { ReactNode } from "react"; import { useMemo, useState } from "react"; -import Link from "next/link"; import type { DragEndEvent, DraggableAttributes, DragStartEvent } from "@dnd-kit/core"; import { closestCenter, @@ -41,7 +40,7 @@ import { clientApi } from "@homarr/api/client"; import { revalidatePathActionAsync } from "@homarr/common/client"; import { showSuccessNotification } from "@homarr/notifications"; import { useI18n } from "@homarr/translation/client"; -import { UserAvatarGroup } from "@homarr/ui"; +import { Link, UserAvatarGroup } from "@homarr/ui"; interface GroupsTableProps { initialGroupIds: string[]; diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx index abd348739..19ec73ff7 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import { notFound } from "next/navigation"; import { Card, Group, Stack, Text, ThemeIcon, Title, UnstyledButton } from "@mantine/core"; import { IconChevronRight, IconUsersGroup } from "@tabler/icons-react"; @@ -7,6 +6,7 @@ import { api } from "@homarr/api/server"; import { auth } from "@homarr/auth/next"; import { everyoneGroup } from "@homarr/definitions"; import { getI18n } from "@homarr/translation/server"; +import { Link } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; diff --git a/apps/nextjs/src/components/access/group-access-form.tsx b/apps/nextjs/src/components/access/group-access-form.tsx index 64dee26ab..749d62306 100644 --- a/apps/nextjs/src/components/access/group-access-form.tsx +++ b/apps/nextjs/src/components/access/group-access-form.tsx @@ -1,10 +1,10 @@ import { useState } from "react"; -import Link from "next/link"; import { Anchor, Button, Group, Stack, Table, TableTbody, TableTh, TableThead, TableTr } from "@mantine/core"; import { IconPlus } from "@tabler/icons-react"; import { useModalAction } from "@homarr/modals"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import type { AccessQueryData } from "./access-settings"; import { AccessSelectRow } from "./access-table-rows"; diff --git a/apps/nextjs/src/components/access/user-access-form.tsx b/apps/nextjs/src/components/access/user-access-form.tsx index 20b032861..1af278a5e 100644 --- a/apps/nextjs/src/components/access/user-access-form.tsx +++ b/apps/nextjs/src/components/access/user-access-form.tsx @@ -1,11 +1,10 @@ import { useState } from "react"; -import Link from "next/link"; import { Anchor, Box, Button, Group, Stack, Table, TableTbody, TableTh, TableThead, TableTr } from "@mantine/core"; import { IconPlus } from "@tabler/icons-react"; import { useModalAction } from "@homarr/modals"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; -import { UserAvatar } from "@homarr/ui"; +import { Link, UserAvatar } from "@homarr/ui"; import type { AccessQueryData } from "./access-settings"; import { AccessDisplayRow, AccessSelectRow } from "./access-table-rows"; diff --git a/apps/nextjs/src/components/layout/header.tsx b/apps/nextjs/src/components/layout/header.tsx index e1f038343..f1e513f30 100644 --- a/apps/nextjs/src/components/layout/header.tsx +++ b/apps/nextjs/src/components/layout/header.tsx @@ -1,8 +1,8 @@ import type { ReactNode } from "react"; -import Link from "next/link"; import { AppShellHeader, Group, UnstyledButton } from "@mantine/core"; import { Spotlight } from "@homarr/spotlight"; +import { Link } from "@homarr/ui"; import { ClientBurger } from "./header/burger"; import { DesktopSearchInput, MobileSearchButton } from "./header/search"; diff --git a/apps/nextjs/src/components/layout/header/button.tsx b/apps/nextjs/src/components/layout/header/button.tsx index 98bdbe0b7..e8d858b6a 100644 --- a/apps/nextjs/src/components/layout/header/button.tsx +++ b/apps/nextjs/src/components/layout/header/button.tsx @@ -1,9 +1,10 @@ import type { ForwardedRef, ReactNode } from "react"; import { forwardRef } from "react"; -import Link from "next/link"; import type { ActionIconProps } from "@mantine/core"; import { ActionIcon } from "@mantine/core"; +import { Link } from "@homarr/ui"; + type HeaderButtonProps = ( | { onClick?: () => void; diff --git a/apps/nextjs/src/components/layout/navigation-link.tsx b/apps/nextjs/src/components/layout/navigation-link.tsx index 6aec0a9f1..dd6949682 100644 --- a/apps/nextjs/src/components/layout/navigation-link.tsx +++ b/apps/nextjs/src/components/layout/navigation-link.tsx @@ -1,10 +1,11 @@ "use client"; import type { ReactNode } from "react"; -import Link from "next/link"; import { usePathname } from "next/navigation"; import { NavLink } from "@mantine/core"; +import { Link } from "@homarr/ui"; + export const CommonNavLink = (props: ClientNavigationLink) => "href" in props ? : ; diff --git a/apps/nextjs/src/components/user-avatar-menu.tsx b/apps/nextjs/src/components/user-avatar-menu.tsx index 9b3e3647a..4a45a14d7 100644 --- a/apps/nextjs/src/components/user-avatar-menu.tsx +++ b/apps/nextjs/src/components/user-avatar-menu.tsx @@ -2,7 +2,6 @@ import type { ReactNode } from "react"; import { useCallback, useEffect } from "react"; -import Link from "next/link"; import { useRouter } from "next/navigation"; import { Center, Menu, Stack, Text, useMantineColorScheme } from "@mantine/core"; import { useHotkeys, useTimeout } from "@mantine/hooks"; @@ -22,6 +21,7 @@ import { signOut, useSession } from "@homarr/auth/client"; import { hotkeys } from "@homarr/definitions"; import { createModal, useModalAction } from "@homarr/modals"; import { useScopedI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { useAuthContext } from "~/app/[locale]/_client-providers/session"; import { CurrentLanguageCombobox } from "./language/current-language-combobox"; diff --git a/apps/nextjs/src/middleware.ts b/apps/nextjs/src/proxy.ts similarity index 64% rename from apps/nextjs/src/middleware.ts rename to apps/nextjs/src/proxy.ts index 453b7b783..42553bc2c 100644 --- a/apps/nextjs/src/middleware.ts +++ b/apps/nextjs/src/proxy.ts @@ -1,10 +1,7 @@ -import { NextResponse } from "next/server"; import type { NextRequest } from "next/server"; -import { createTRPCClient, httpLink } from "@trpc/client"; -import SuperJSON from "superjson"; +import { NextResponse } from "next/server"; -import type { AppRouter } from "@homarr/api"; -import { createHeadersCallbackForSource, getTrpcUrl } from "@homarr/api/shared"; +import { api } from "@homarr/api/server"; import { localeCookieKey } from "@homarr/definitions"; import type { SupportedLanguage } from "@homarr/translation"; import { supportedLanguages } from "@homarr/translation"; @@ -12,12 +9,12 @@ import { createI18nMiddleware } from "@homarr/translation/middleware"; let isOnboardingFinished = false; -export async function middleware(request: NextRequest) { +export async function proxy(request: NextRequest) { // Redirect to onboarding if it's not finished yet const pathname = request.nextUrl.pathname; if (!isOnboardingFinished && !pathname.endsWith("/init")) { - const currentOnboardingStep = await serverFetchApi.onboard.currentStep.query(); + const currentOnboardingStep = await api.onboard.currentStep(); if (currentOnboardingStep.current !== "finish") { return NextResponse.redirect(new URL("/init", request.url)); } @@ -29,11 +26,12 @@ export async function middleware(request: NextRequest) { const currentLocale = request.cookies.get(localeCookieKey)?.value; let defaultLocale: SupportedLanguage = "en"; if (!currentLocale || !supportedLanguages.includes(currentLocale as SupportedLanguage)) { - defaultLocale = await serverFetchApi.serverSettings.getCulture.query().then((culture) => culture.defaultLocale); + defaultLocale = await api.serverSettings.getCulture().then((culture) => culture.defaultLocale); } // We don't want to fallback to accept-language header so we clear it request.headers.set("accept-language", ""); + const next = createI18nMiddleware(defaultLocale); return next(request); } @@ -41,13 +39,3 @@ export async function middleware(request: NextRequest) { export const config = { matcher: ["/((?!api|static|.*\\..*|_next|favicon.ico|robots.txt).*)"], }; - -export const serverFetchApi = createTRPCClient({ - links: [ - httpLink({ - url: getTrpcUrl(), - transformer: SuperJSON, - headers: createHeadersCallbackForSource("server-fetch"), - }), - ], -}); diff --git a/packages/api/package.json b/packages/api/package.json index bdf05acb4..f255110ff 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -49,7 +49,7 @@ "@trpc/server": "^11.7.1", "@trpc/tanstack-react-query": "^11.7.1", "lodash.clonedeep": "^4.5.0", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0", "superjson": "2.2.5", diff --git a/packages/auth/package.json b/packages/auth/package.json index dcd0584da..bd7a11c8c 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -35,7 +35,7 @@ "bcrypt": "^6.0.0", "cookies": "^0.9.1", "ldapts": "8.0.9", - "next": "15.5.6", + "next": "16.0.1", "next-auth": "5.0.0-beta.30", "react": "19.2.0", "react-dom": "19.2.0", diff --git a/packages/common/package.json b/packages/common/package.json index 469891c5d..831ea27d8 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -32,7 +32,7 @@ "@paralleldrive/cuid2": "^3.1.0", "dayjs": "^1.11.18", "dns-caching": "^0.2.7", - "next": "15.5.6", + "next": "16.0.1", "octokit": "^5.0.4", "react": "19.2.0", "react-dom": "19.2.0", diff --git a/packages/forms-collection/package.json b/packages/forms-collection/package.json index a2d305841..84cc29dd8 100644 --- a/packages/forms-collection/package.json +++ b/packages/forms-collection/package.json @@ -28,6 +28,7 @@ "@homarr/form": "workspace:^0.1.0", "@homarr/notifications": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", + "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@mantine/core": "^8.3.6", "react": "19.2.0", diff --git a/packages/forms-collection/src/new-app/_form.tsx b/packages/forms-collection/src/new-app/_form.tsx index 00d60a033..82f5a7caa 100644 --- a/packages/forms-collection/src/new-app/_form.tsx +++ b/packages/forms-collection/src/new-app/_form.tsx @@ -2,7 +2,6 @@ import type { ChangeEventHandler } from "react"; import { useEffect, useRef } from "react"; -import Link from "next/link"; import { Button, Checkbox, Collapse, Group, Stack, Textarea, TextInput } from "@mantine/core"; import { useDebouncedValue, useDisclosure } from "@mantine/hooks"; import type { z } from "zod/v4"; @@ -10,6 +9,7 @@ import type { z } from "zod/v4"; import { clientApi } from "@homarr/api/client"; import { useZodForm } from "@homarr/form"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import { appManageSchema } from "@homarr/validation/app"; import { IconPicker } from "../icon-picker/icon-picker"; diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json index 87affbdee..2f80cf102 100644 --- a/packages/modals-collection/package.json +++ b/packages/modals-collection/package.json @@ -36,7 +36,7 @@ "@mantine/core": "^8.3.6", "@tabler/icons-react": "^3.35.0", "dayjs": "^1.11.18", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0", "zod": "^4.1.12" diff --git a/packages/modals-collection/src/invites/invite-copy-modal.tsx b/packages/modals-collection/src/invites/invite-copy-modal.tsx index 08136af34..c8bdf4056 100644 --- a/packages/modals-collection/src/invites/invite-copy-modal.tsx +++ b/packages/modals-collection/src/invites/invite-copy-modal.tsx @@ -1,10 +1,10 @@ -import Link from "next/link"; import { usePathname } from "next/navigation"; import { Button, CopyButton, Mark, Stack, Text } from "@mantine/core"; import type { RouterOutputs } from "@homarr/api"; import { createModal } from "@homarr/modals"; import { useScopedI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; export const InviteCopyModal = createModal(({ actions, innerProps }) => { const t = useScopedI18n("management.page.user.invite"); diff --git a/packages/old-import/package.json b/packages/old-import/package.json index 0a823827e..ec06ac23e 100644 --- a/packages/old-import/package.json +++ b/packages/old-import/package.json @@ -40,7 +40,7 @@ "@mantine/core": "^8.3.6", "@mantine/hooks": "^8.3.6", "adm-zip": "0.5.16", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0", "superjson": "2.2.5", diff --git a/packages/settings/package.json b/packages/settings/package.json index 908d97255..d70e0764c 100644 --- a/packages/settings/package.json +++ b/packages/settings/package.json @@ -27,7 +27,7 @@ "@homarr/db": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", "@mantine/dates": "^8.3.6", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0" }, diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index 603cc087a..a6e3ea070 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -38,7 +38,7 @@ "@mantine/spotlight": "^8.3.6", "@tabler/icons-react": "^3.35.0", "jotai": "^2.15.0", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0", "use-deep-compare-effect": "^1.8.1" diff --git a/packages/spotlight/src/components/actions/items/children-action-item.tsx b/packages/spotlight/src/components/actions/items/children-action-item.tsx index 777446b78..f7c98c519 100644 --- a/packages/spotlight/src/components/actions/items/children-action-item.tsx +++ b/packages/spotlight/src/components/actions/items/children-action-item.tsx @@ -1,6 +1,7 @@ -import Link from "next/link"; import { Spotlight } from "@mantine/spotlight"; +import { Link } from "@homarr/ui"; + import type { inferSearchInteractionOptions } from "../../../lib/interaction"; import classes from "./action-item.module.css"; diff --git a/packages/spotlight/src/components/actions/items/group-action-item.tsx b/packages/spotlight/src/components/actions/items/group-action-item.tsx index a4221f514..d5f85f3be 100644 --- a/packages/spotlight/src/components/actions/items/group-action-item.tsx +++ b/packages/spotlight/src/components/actions/items/group-action-item.tsx @@ -1,7 +1,7 @@ -import Link from "next/link"; import { Spotlight } from "@mantine/spotlight"; import type { TranslationObject } from "@homarr/translation"; +import { Link } from "@homarr/ui"; import type { SearchGroup } from "../../../lib/group"; import type { inferSearchInteractionOptions } from "../../../lib/interaction"; diff --git a/packages/translation/package.json b/packages/translation/package.json index c2b232a98..7cf44aa9f 100644 --- a/packages/translation/package.json +++ b/packages/translation/package.json @@ -32,7 +32,7 @@ "dayjs": "^1.11.18", "deepmerge": "4.3.1", "mantine-react-table": "2.0.0-beta.9", - "next": "15.5.6", + "next": "16.0.1", "next-intl": "4.4.0", "react": "19.2.0", "react-dom": "19.2.0" diff --git a/packages/ui/package.json b/packages/ui/package.json index 9ec396df5..f9a7b8681 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -35,7 +35,7 @@ "@mantine/hooks": "^8.3.6", "@tabler/icons-react": "^3.35.0", "mantine-react-table": "2.0.0-beta.9", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0", "svgson": "^5.3.1" diff --git a/packages/ui/src/components/index.tsx b/packages/ui/src/components/index.tsx index ff7201e28..717359dac 100644 --- a/packages/ui/src/components/index.tsx +++ b/packages/ui/src/components/index.tsx @@ -15,3 +15,4 @@ export { BetaBadge } from "./beta-badge"; export { MaskedImage } from "./masked-image"; export { MaskedOrNormalImage } from "./masked-or-normal-image"; export { LanguageIcon } from "./language-icon"; +export { Link } from "./link"; diff --git a/packages/ui/src/components/link.tsx b/packages/ui/src/components/link.tsx new file mode 100644 index 000000000..fe0f9ebf2 --- /dev/null +++ b/packages/ui/src/components/link.tsx @@ -0,0 +1,5 @@ +"use client"; + +import NextLink from "next/link"; + +export const Link = NextLink; diff --git a/packages/ui/src/components/table-pagination.tsx b/packages/ui/src/components/table-pagination.tsx index e2380f821..9b1fabb1f 100644 --- a/packages/ui/src/components/table-pagination.tsx +++ b/packages/ui/src/components/table-pagination.tsx @@ -1,11 +1,12 @@ "use client"; import { useCallback } from "react"; -import Link from "next/link"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import type { PaginationProps } from "@mantine/core"; import { Pagination } from "@mantine/core"; +import { Link } from "@homarr/ui"; + interface TablePaginationProps { total: number; } diff --git a/packages/widgets/package.json b/packages/widgets/package.json index f5a240cc6..150355ad9 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -72,7 +72,7 @@ "dayjs": "^1.11.18", "mantine-form-zod-resolver": "^1.3.0", "mantine-react-table": "2.0.0-beta.9", - "next": "15.5.6", + "next": "16.0.1", "react": "19.2.0", "react-dom": "19.2.0", "react-markdown": "^10.1.0", diff --git a/packages/widgets/src/_inputs/widget-app-input.tsx b/packages/widgets/src/_inputs/widget-app-input.tsx index 5f1a1b18a..2138258c2 100644 --- a/packages/widgets/src/_inputs/widget-app-input.tsx +++ b/packages/widgets/src/_inputs/widget-app-input.tsx @@ -1,7 +1,6 @@ "use client"; import { memo, useMemo } from "react"; -import Link from "next/link"; import type { SelectProps } from "@mantine/core"; import { Anchor, Button, Group, Loader, Select, SimpleGrid, Text } from "@mantine/core"; import { IconCheck, IconRocket } from "@tabler/icons-react"; @@ -12,6 +11,7 @@ import { useSession } from "@homarr/auth/client"; import { useModalAction } from "@homarr/modals"; import { QuickAddAppModal } from "@homarr/modals-collection"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import type { CommonWidgetInputProps } from "./common"; import { useWidgetInputTranslation } from "./common"; diff --git a/packages/widgets/src/errors/base-component.tsx b/packages/widgets/src/errors/base-component.tsx index 65135acff..8d656f0c4 100644 --- a/packages/widgets/src/errors/base-component.tsx +++ b/packages/widgets/src/errors/base-component.tsx @@ -1,9 +1,9 @@ -import Link from "next/link"; import { Anchor, Button, Stack, Text } from "@mantine/core"; import type { stringOrTranslation } from "@homarr/translation"; import { translateIfNecessary } from "@homarr/translation"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import type { TablerIcon } from "@homarr/ui"; export interface BaseWidgetErrorProps { diff --git a/packages/widgets/src/widget-integration-select.tsx b/packages/widgets/src/widget-integration-select.tsx index 8567b39d3..8e41e8bec 100644 --- a/packages/widgets/src/widget-integration-select.tsx +++ b/packages/widgets/src/widget-integration-select.tsx @@ -1,7 +1,6 @@ "use client"; import type { FocusEventHandler } from "react"; -import Link from "next/link"; import { Anchor, Avatar, @@ -20,6 +19,7 @@ import { import type { IntegrationKind } from "@homarr/definitions"; import { getIconUrl } from "@homarr/definitions"; import { useI18n } from "@homarr/translation/client"; +import { Link } from "@homarr/ui"; import classes from "./widget-integration-select.module.css"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d79b441c4..3e7bd1197 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -243,13 +243,13 @@ importers: version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(react@19.2.0) '@tanstack/react-query-next-experimental': specifier: ^5.90.2 - version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(next@15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0) + version: 5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(next@16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0) '@trpc/client': specifier: ^11.7.1 version: 11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3) '@trpc/next': specifier: ^11.7.1 - version: 11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(next@15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(next@16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) '@trpc/react-query': specifier: ^11.7.1 version: 11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) @@ -265,6 +265,9 @@ importers: '@xterm/xterm': specifier: ^5.5.0 version: 5.5.0 + babel-plugin-react-compiler: + specifier: ^1.0.0 + version: 1.0.0 chroma-js: specifier: ^3.1.2 version: 3.1.2 @@ -290,8 +293,8 @@ importers: specifier: 2.0.0-beta.9 version: 2.0.0-beta.9(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/dates@8.3.6(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(@tabler/icons-react@3.35.0(react@19.2.0))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) postcss-preset-mantine: specifier: ^1.18.0 version: 1.18.0(postcss@8.5.6) @@ -651,8 +654,8 @@ importers: specifier: ^4.5.0 version: 4.5.0 next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -727,11 +730,11 @@ importers: specifier: 8.0.9 version: 8.0.9 next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) next-auth: specifier: 5.0.0-beta.30 - version: 5.0.0-beta.30(next@15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0) + version: 5.0.0-beta.30(next@16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0) react: specifier: 19.2.0 version: 19.2.0 @@ -881,8 +884,8 @@ importers: specifier: ^0.2.7 version: 0.2.7 next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) octokit: specifier: ^5.0.4 version: 5.0.4 @@ -1337,6 +1340,9 @@ importers: '@homarr/translation': specifier: workspace:^0.1.0 version: link:../translation + '@homarr/ui': + specifier: workspace:^0.1.0 + version: link:../ui '@homarr/validation': specifier: workspace:^0.1.0 version: link:../validation @@ -1641,8 +1647,8 @@ importers: specifier: ^1.11.18 version: 1.11.18 next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -1742,8 +1748,8 @@ importers: specifier: 0.5.16 version: 0.5.16 next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -1967,8 +1973,8 @@ importers: specifier: ^8.3.6 version: 8.3.6(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -2040,8 +2046,8 @@ importers: specifier: ^2.15.0 version: 2.15.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@19.2.2)(react@19.2.0) next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -2086,11 +2092,11 @@ importers: specifier: 2.0.0-beta.9 version: 2.0.0-beta.9(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/dates@8.3.6(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(@tabler/icons-react@3.35.0(react@19.2.0))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) next-intl: specifier: 4.4.0 - version: 4.4.0(next@15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) + version: 4.4.0(next@16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) react: specifier: 19.2.0 version: 19.2.0 @@ -2147,8 +2153,8 @@ importers: specifier: 2.0.0-beta.9 version: 2.0.0-beta.9(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/dates@8.3.6(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(@tabler/icons-react@3.35.0(react@19.2.0))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -2353,8 +2359,8 @@ importers: specifier: 2.0.0-beta.9 version: 2.0.0-beta.9(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/dates@8.3.6(@mantine/core@8.3.6(@mantine/hooks@8.3.6(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.6(react@19.2.0))(@tabler/icons-react@3.35.0(react@19.2.0))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: - specifier: 15.5.6 - version: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: specifier: 19.2.0 version: 19.2.0 @@ -2396,8 +2402,8 @@ importers: tooling/eslint: dependencies: '@next/eslint-plugin-next': - specifier: 15.5.6 - version: 15.5.6 + specifier: 16.0.1 + version: 16.0.1 eslint-config-prettier: specifier: ^10.1.8 version: 10.1.8(eslint@9.38.0) @@ -2828,8 +2834,8 @@ packages: '@drizzle-team/brocli@0.11.0': resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==} - '@emnapi/runtime@1.4.4': - resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==} + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} @@ -3173,124 +3179,128 @@ packages: prettier-plugin-ember-template-tag: optional: true - '@img/sharp-darwin-arm64@0.34.3': - resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.4': + resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.3': - resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} + '@img/sharp-darwin-x64@0.34.4': + resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.0': - resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} + '@img/sharp-libvips-darwin-arm64@1.2.3': + resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.0': - resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} + '@img/sharp-libvips-darwin-x64@1.2.3': + resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.0': - resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} + '@img/sharp-libvips-linux-arm64@1.2.3': + resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.0': - resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} + '@img/sharp-libvips-linux-arm@1.2.3': + resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.0': - resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} + '@img/sharp-libvips-linux-ppc64@1.2.3': + resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.0': - resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} + '@img/sharp-libvips-linux-s390x@1.2.3': + resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.0': - resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} + '@img/sharp-libvips-linux-x64@1.2.3': + resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': - resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.0': - resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.3': - resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} + '@img/sharp-linux-arm64@0.34.4': + resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.3': - resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} + '@img/sharp-linux-arm@0.34.4': + resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.3': - resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + '@img/sharp-linux-ppc64@0.34.4': + resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.34.3': - resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} + '@img/sharp-linux-s390x@0.34.4': + resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.3': - resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} + '@img/sharp-linux-x64@0.34.4': + resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.3': - resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} + '@img/sharp-linuxmusl-arm64@0.34.4': + resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.3': - resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} + '@img/sharp-linuxmusl-x64@0.34.4': + resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.3': - resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} + '@img/sharp-wasm32@0.34.4': + resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.3': - resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + '@img/sharp-win32-arm64@0.34.4': + resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.3': - resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} + '@img/sharp-win32-ia32@0.34.4': + resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.3': - resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} + '@img/sharp-win32-x64@0.34.4': + resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -3480,56 +3490,56 @@ packages: '@ndaidong/bellajs@12.0.1': resolution: {integrity: sha512-1iY42uiHz0cxNMbde7O3zVN+ZX1viOOUOBRt6ht6lkRZbSjwOnFV34Zv4URp3hGzEe6L9Byk7BOq/41H0PzAOQ==} - '@next/env@15.5.6': - resolution: {integrity: sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==} + '@next/env@16.0.1': + resolution: {integrity: sha512-LFvlK0TG2L3fEOX77OC35KowL8D7DlFF45C0OvKMC4hy8c/md1RC4UMNDlUGJqfCoCS2VWrZ4dSE6OjaX5+8mw==} - '@next/eslint-plugin-next@15.5.6': - resolution: {integrity: sha512-YxDvsT2fwy1j5gMqk3ppXlsgDopHnkM4BoxSVASbvvgh5zgsK8lvWerDzPip8k3WVzsTZ1O7A7si1KNfN4OZfQ==} + '@next/eslint-plugin-next@16.0.1': + resolution: {integrity: sha512-g4Cqmv/gyFEXNeVB2HkqDlYKfy+YrlM2k8AVIO/YQVEPfhVruH1VA99uT1zELLnPLIeOnx8IZ6Ddso0asfTIdw==} - '@next/swc-darwin-arm64@15.5.6': - resolution: {integrity: sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==} + '@next/swc-darwin-arm64@16.0.1': + resolution: {integrity: sha512-R0YxRp6/4W7yG1nKbfu41bp3d96a0EalonQXiMe+1H9GTHfKxGNCGFNWUho18avRBPsO8T3RmdWuzmfurlQPbg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.6': - resolution: {integrity: sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA==} + '@next/swc-darwin-x64@16.0.1': + resolution: {integrity: sha512-kETZBocRux3xITiZtOtVoVvXyQLB7VBxN7L6EPqgI5paZiUlnsgYv4q8diTNYeHmF9EiehydOBo20lTttCbHAg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.6': - resolution: {integrity: sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg==} + '@next/swc-linux-arm64-gnu@16.0.1': + resolution: {integrity: sha512-hWg3BtsxQuSKhfe0LunJoqxjO4NEpBmKkE+P2Sroos7yB//OOX3jD5ISP2wv8QdUwtRehMdwYz6VB50mY6hqAg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.6': - resolution: {integrity: sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w==} + '@next/swc-linux-arm64-musl@16.0.1': + resolution: {integrity: sha512-UPnOvYg+fjAhP3b1iQStcYPWeBFRLrugEyK/lDKGk7kLNua8t5/DvDbAEFotfV1YfcOY6bru76qN9qnjLoyHCQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.6': - resolution: {integrity: sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA==} + '@next/swc-linux-x64-gnu@16.0.1': + resolution: {integrity: sha512-Et81SdWkcRqAJziIgFtsFyJizHoWne4fzJkvjd6V4wEkWTB4MX6J0uByUb0peiJQ4WeAt6GGmMszE5KrXK6WKg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.6': - resolution: {integrity: sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ==} + '@next/swc-linux-x64-musl@16.0.1': + resolution: {integrity: sha512-qBbgYEBRrC1egcG03FZaVfVxrJm8wBl7vr8UFKplnxNRprctdP26xEv9nJ07Ggq4y1adwa0nz2mz83CELY7N6Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.6': - resolution: {integrity: sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg==} + '@next/swc-win32-arm64-msvc@16.0.1': + resolution: {integrity: sha512-cPuBjYP6I699/RdbHJonb3BiRNEDm5CKEBuJ6SD8k3oLam2fDRMKAvmrli4QMDgT2ixyRJ0+DTkiODbIQhRkeQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.6': - resolution: {integrity: sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ==} + '@next/swc-win32-x64-msvc@16.0.1': + resolution: {integrity: sha512-XeEUJsE4JYtfrXe/LaJn3z1pD19fK0Q6Er8Qoufi+HqvdO4LEPyCxLUt4rxA+4RfYo6S9gMlmzCMU2F+AatFqQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5216,6 +5226,9 @@ packages: b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + babel-plugin-react-compiler@1.0.0: + resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} + babel-plugin-syntax-hermes-parser@0.21.1: resolution: {integrity: sha512-tUCEa+EykZx3oJXc+PolKz2iwDscCJ2hCONMvEqjAb4jIQH5ZapDd5Brs2Nk4TQpSJ/1Ykz53ksQbevXbF0wxg==} @@ -5569,17 +5582,10 @@ packages: resolution: {integrity: sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==} engines: {node: '>=12.20'} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - color-string@2.1.2: resolution: {integrity: sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==} engines: {node: '>=18'} - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - color@5.0.2: resolution: {integrity: sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==} engines: {node: '>=18'} @@ -5969,6 +5975,10 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-newline@4.0.1: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7199,9 +7209,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -8137,9 +8144,9 @@ packages: typescript: optional: true - next@15.5.6: - resolution: {integrity: sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + next@16.0.1: + resolution: {integrity: sha512-e9RLSssZwd35p7/vOa+hoDFggUZIUbZhIUSLZuETCwrCVvxOs87NamoUzT+vbcNAL8Ld9GobBnWOA6SbV/arOw==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -9476,8 +9483,8 @@ packages: engines: {node: '>= 0.10'} hasBin: true - sharp@0.34.3: - resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + sharp@0.34.4: + resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -9532,9 +9539,6 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - sirv@3.0.1: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} @@ -10983,7 +10987,7 @@ snapshots: '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -11008,7 +11012,7 @@ snapshots: '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.28.4 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -11048,7 +11052,7 @@ snapshots: '@babel/generator@7.28.3': dependencies: '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.0.2 @@ -11089,7 +11093,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color @@ -11128,7 +11132,7 @@ snapshots: '@babel/parser@7.28.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@babel/parser@7.28.4': dependencies: @@ -11181,7 +11185,7 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.3 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -11367,7 +11371,7 @@ snapshots: '@drizzle-team/brocli@0.11.0': {} - '@emnapi/runtime@1.4.4': + '@emnapi/runtime@1.6.0': dependencies: tslib: 2.8.1 optional: true @@ -11667,90 +11671,93 @@ snapshots: transitivePeerDependencies: - supports-color - '@img/sharp-darwin-arm64@0.34.3': + '@img/colour@1.0.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-arm64': 1.2.3 optional: true - '@img/sharp-darwin-x64@0.34.3': + '@img/sharp-darwin-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.3 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.0': + '@img/sharp-libvips-darwin-arm64@1.2.3': optional: true - '@img/sharp-libvips-darwin-x64@1.2.0': + '@img/sharp-libvips-darwin-x64@1.2.3': optional: true - '@img/sharp-libvips-linux-arm64@1.2.0': + '@img/sharp-libvips-linux-arm64@1.2.3': optional: true - '@img/sharp-libvips-linux-arm@1.2.0': + '@img/sharp-libvips-linux-arm@1.2.3': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.0': + '@img/sharp-libvips-linux-ppc64@1.2.3': optional: true - '@img/sharp-libvips-linux-s390x@1.2.0': + '@img/sharp-libvips-linux-s390x@1.2.3': optional: true - '@img/sharp-libvips-linux-x64@1.2.0': + '@img/sharp-libvips-linux-x64@1.2.3': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.0': + '@img/sharp-libvips-linuxmusl-x64@1.2.3': optional: true - '@img/sharp-linux-arm64@0.34.3': + '@img/sharp-linux-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.3 optional: true - '@img/sharp-linux-arm@0.34.3': + '@img/sharp-linux-arm@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.3 optional: true - '@img/sharp-linux-ppc64@0.34.3': + '@img/sharp-linux-ppc64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.3 optional: true - '@img/sharp-linux-s390x@0.34.3': + '@img/sharp-linux-s390x@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.3 optional: true - '@img/sharp-linux-x64@0.34.3': + '@img/sharp-linux-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.3 optional: true - '@img/sharp-linuxmusl-arm64@0.34.3': + '@img/sharp-linuxmusl-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 optional: true - '@img/sharp-linuxmusl-x64@0.34.3': + '@img/sharp-linuxmusl-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 optional: true - '@img/sharp-wasm32@0.34.3': + '@img/sharp-wasm32@0.34.4': dependencies: - '@emnapi/runtime': 1.4.4 + '@emnapi/runtime': 1.6.0 optional: true - '@img/sharp-win32-arm64@0.34.3': + '@img/sharp-win32-arm64@0.34.4': optional: true - '@img/sharp-win32-ia32@0.34.3': + '@img/sharp-win32-ia32@0.34.4': optional: true - '@img/sharp-win32-x64@0.34.3': + '@img/sharp-win32-x64@0.34.4': optional: true '@ioredis/commands@1.4.0': {} @@ -12015,34 +12022,34 @@ snapshots: '@ndaidong/bellajs@12.0.1': {} - '@next/env@15.5.6': {} + '@next/env@16.0.1': {} - '@next/eslint-plugin-next@15.5.6': + '@next/eslint-plugin-next@16.0.1': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.6': + '@next/swc-darwin-arm64@16.0.1': optional: true - '@next/swc-darwin-x64@15.5.6': + '@next/swc-darwin-x64@16.0.1': optional: true - '@next/swc-linux-arm64-gnu@15.5.6': + '@next/swc-linux-arm64-gnu@16.0.1': optional: true - '@next/swc-linux-arm64-musl@15.5.6': + '@next/swc-linux-arm64-musl@16.0.1': optional: true - '@next/swc-linux-x64-gnu@15.5.6': + '@next/swc-linux-x64-gnu@16.0.1': optional: true - '@next/swc-linux-x64-musl@15.5.6': + '@next/swc-linux-x64-musl@16.0.1': optional: true - '@next/swc-win32-arm64-msvc@15.5.6': + '@next/swc-win32-arm64-msvc@16.0.1': optional: true - '@next/swc-win32-x64-msvc@15.5.6': + '@next/swc-win32-x64-msvc@16.0.1': optional: true '@noble/hashes@2.0.1': {} @@ -12917,10 +12924,10 @@ snapshots: '@tanstack/react-query': 5.90.5(react@19.2.0) react: 19.2.0 - '@tanstack/react-query-next-experimental@5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(next@15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)': + '@tanstack/react-query-next-experimental@5.90.2(@tanstack/react-query@5.90.5(react@19.2.0))(next@16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)': dependencies: '@tanstack/react-query': 5.90.5(react@19.2.0) - next: 15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + next: 16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: 19.2.0 '@tanstack/react-query@5.90.5(react@19.2.0)': @@ -13192,11 +13199,11 @@ snapshots: '@trpc/server': 11.7.1(typescript@5.9.3) typescript: 5.9.3 - '@trpc/next@11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(next@15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)': + '@trpc/next@11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.7.1(@tanstack/react-query@5.90.5(react@19.2.0))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(next@16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)': dependencies: '@trpc/client': 11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3) '@trpc/server': 11.7.1(typescript@5.9.3) - next: 15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + next: 16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) typescript: 5.9.3 @@ -14188,6 +14195,10 @@ snapshots: b4a@1.6.6: {} + babel-plugin-react-compiler@1.0.0: + dependencies: + '@babel/types': 7.28.4 + babel-plugin-syntax-hermes-parser@0.21.1: dependencies: hermes-parser: 0.21.1 @@ -14548,22 +14559,10 @@ snapshots: color-name@2.0.2: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - optional: true - color-string@2.1.2: dependencies: color-name: 2.0.2 - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - color@5.0.2: dependencies: color-convert: 3.1.2 @@ -14932,6 +14931,9 @@ snapshots: detect-libc@2.0.4: {} + detect-libc@2.1.2: + optional: true + detect-newline@4.0.1: {} detect-node-es@1.1.0: {} @@ -16452,9 +16454,6 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: - optional: true - is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 @@ -17028,7 +17027,7 @@ snapshots: magicast@0.3.5: dependencies: '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 source-map-js: 1.2.1 make-dir@3.1.0: @@ -17446,25 +17445,25 @@ snapshots: netmask@2.0.2: {} - next-auth@5.0.0-beta.30(next@15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0): + next-auth@5.0.0-beta.30(next@16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0): dependencies: '@auth/core': 0.41.0 - next: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + next: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: 19.2.0 - next-intl@4.4.0(next@15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): + next-intl@4.4.0(next@16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): dependencies: '@formatjs/intl-localematcher': 0.5.5 negotiator: 1.0.0 - next: 15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + next: 16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: 19.2.0 use-intl: 4.4.0(react@19.2.0) optionalDependencies: typescript: 5.9.3 - next@15.5.6(@babel/core@7.26.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): + next@16.0.1(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): dependencies: - '@next/env': 15.5.6 + '@next/env': 16.0.1 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001703 postcss: 8.4.31 @@ -17472,23 +17471,24 @@ snapshots: react-dom: 19.2.0(react@19.2.0) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.6 - '@next/swc-darwin-x64': 15.5.6 - '@next/swc-linux-arm64-gnu': 15.5.6 - '@next/swc-linux-arm64-musl': 15.5.6 - '@next/swc-linux-x64-gnu': 15.5.6 - '@next/swc-linux-x64-musl': 15.5.6 - '@next/swc-win32-arm64-msvc': 15.5.6 - '@next/swc-win32-x64-msvc': 15.5.6 + '@next/swc-darwin-arm64': 16.0.1 + '@next/swc-darwin-x64': 16.0.1 + '@next/swc-linux-arm64-gnu': 16.0.1 + '@next/swc-linux-arm64-musl': 16.0.1 + '@next/swc-linux-x64-gnu': 16.0.1 + '@next/swc-linux-x64-musl': 16.0.1 + '@next/swc-win32-arm64-msvc': 16.0.1 + '@next/swc-win32-x64-msvc': 16.0.1 + babel-plugin-react-compiler: 1.0.0 sass: 1.93.2 - sharp: 0.34.3 + sharp: 0.34.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@15.5.6(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): + next@16.0.1(@babel/core@7.28.4)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): dependencies: - '@next/env': 15.5.6 + '@next/env': 16.0.1 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001703 postcss: 8.4.31 @@ -17496,16 +17496,17 @@ snapshots: react-dom: 19.2.0(react@19.2.0) styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.6 - '@next/swc-darwin-x64': 15.5.6 - '@next/swc-linux-arm64-gnu': 15.5.6 - '@next/swc-linux-arm64-musl': 15.5.6 - '@next/swc-linux-x64-gnu': 15.5.6 - '@next/swc-linux-x64-musl': 15.5.6 - '@next/swc-win32-arm64-msvc': 15.5.6 - '@next/swc-win32-x64-msvc': 15.5.6 + '@next/swc-darwin-arm64': 16.0.1 + '@next/swc-darwin-x64': 16.0.1 + '@next/swc-linux-arm64-gnu': 16.0.1 + '@next/swc-linux-arm64-musl': 16.0.1 + '@next/swc-linux-x64-gnu': 16.0.1 + '@next/swc-linux-x64-musl': 16.0.1 + '@next/swc-win32-arm64-msvc': 16.0.1 + '@next/swc-win32-x64-msvc': 16.0.1 + babel-plugin-react-compiler: 1.0.0 sass: 1.93.2 - sharp: 0.34.3 + sharp: 0.34.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -18981,34 +18982,34 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.1 - sharp@0.34.3: + sharp@0.34.4: dependencies: - color: 4.2.3 - detect-libc: 2.0.4 + '@img/colour': 1.0.0 + detect-libc: 2.1.2 semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.3 - '@img/sharp-darwin-x64': 0.34.3 - '@img/sharp-libvips-darwin-arm64': 1.2.0 - '@img/sharp-libvips-darwin-x64': 1.2.0 - '@img/sharp-libvips-linux-arm': 1.2.0 - '@img/sharp-libvips-linux-arm64': 1.2.0 - '@img/sharp-libvips-linux-ppc64': 1.2.0 - '@img/sharp-libvips-linux-s390x': 1.2.0 - '@img/sharp-libvips-linux-x64': 1.2.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 - '@img/sharp-linux-arm': 0.34.3 - '@img/sharp-linux-arm64': 0.34.3 - '@img/sharp-linux-ppc64': 0.34.3 - '@img/sharp-linux-s390x': 0.34.3 - '@img/sharp-linux-x64': 0.34.3 - '@img/sharp-linuxmusl-arm64': 0.34.3 - '@img/sharp-linuxmusl-x64': 0.34.3 - '@img/sharp-wasm32': 0.34.3 - '@img/sharp-win32-arm64': 0.34.3 - '@img/sharp-win32-ia32': 0.34.3 - '@img/sharp-win32-x64': 0.34.3 + '@img/sharp-darwin-arm64': 0.34.4 + '@img/sharp-darwin-x64': 0.34.4 + '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-linux-arm': 0.34.4 + '@img/sharp-linux-arm64': 0.34.4 + '@img/sharp-linux-ppc64': 0.34.4 + '@img/sharp-linux-s390x': 0.34.4 + '@img/sharp-linux-x64': 0.34.4 + '@img/sharp-linuxmusl-arm64': 0.34.4 + '@img/sharp-linuxmusl-x64': 0.34.4 + '@img/sharp-wasm32': 0.34.4 + '@img/sharp-win32-arm64': 0.34.4 + '@img/sharp-win32-ia32': 0.34.4 + '@img/sharp-win32-x64': 0.34.4 optional: true shebang-command@2.0.0: @@ -19069,11 +19070,6 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - optional: true - sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.25 diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index 6a5bbb2e4..9669fa1d4 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -17,7 +17,7 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@next/eslint-plugin-next": "15.5.6", + "@next/eslint-plugin-next": "16.0.1", "eslint-config-prettier": "^10.1.8", "eslint-config-turbo": "^2.5.8", "eslint-plugin-import": "^2.32.0",